有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用java流添加所有内容?

如何使用Java8添加所有内容

processeditemList is a Map<Integer, Map<Item, Boolean>> 

至于现在,我正在做:

List<Item> itemList = Lists.newLinkedList();
for (Map<Item, Boolean> entry : processeditemList.values()) {
    itemList.addAll(entry.keySet());
}
return itemList;

共 (2) 个答案

  1. # 1 楼答案

    你可以使用flatMap。它用于将多个流合并为一个流。因此,这里需要创建一个集合流,然后从每个集合中创建一个流:

    processeditemList.values().stream()
        .map(Map::keySet)     // Stream<Set<Item>>
        .flatMap(Set::stream) // convert each set to a stream
        .collect(toList());   // convert to list, this will be an ArrayList implmentation by default
    

    如果要更改默认列表实现,则可以使用以下收集器:

    Collectors.toCollection(LinkedList::new)
    

    如果您不知道列表的最终大小,并且执行的插入操作比读取操作多,则LinkedList会很好

    ArrayList是oposite:你读的越多,添加/删除的就越少。因为引擎盖下的ArrayList包含一个数组,在添加新元素时必须重新调整该数组的比例,但在删除元素时,该数组永远不会缩小

  2. # 2 楼答案

    我现在正在打电话,所以我不能保证这在语法上是完美的,但以下是使用Stream的方法:

    processeditemList.values().stream()
        .flatMap(e -> e.keySet().stream())
        .collect(Collectors.toCollection(LinkedList::new));
    

    我目前无法测试它,但我会查看Javadocs,如果它不正确,我会更改任何内容

    编辑:我觉得一切都很好。如果使用哪种List实现并不重要,您可以更改

    Collectors.toCollection(LinkedList::new)
    

    Collectors.toList()