从集合集中添加所有项目的最佳方法

Joe*_*oel 3 java collections java-8 java-stream collectors

实现以下目标的最佳,最便宜,最佳性能的方法是什么:

我有一个CollectionObjects myObject,它提供了一个返回一组整数的方法.我想将集合中的所有项目添加到新集合中.

LinkedList<myObject>  ll = new LinkedList<>();

    //fill the list bla bla

Set<Integer> result = ll.stream()
    .map(f -> f.getTheSet())
    .flatMap(Set::stream)
    .collect(Collectors.toCollection(TreeSet::new));

System.out.println(result.toString());
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来获得包含所有对象的所有整数的结果集?我想避免使用flatMap命令"解压缩集合" .相反,我想到的事情.addAll或者最终无关紧要,因为.addAll无论如何解开?

Mis*_*sha 10

您可以收集使用addAll带有三个参数collect:

Set<Integer> result = ll.stream()
        .map(MyObject::getTheSet)
        .collect(HashSet::new, Set::addAll, Set::addAll);
Run Code Online (Sandbox Code Playgroud)

HashSet::new创建一个新容器,Set::addAll将每个集合添加到容器中,Set::addAll如果要并行运行此流,则第二个合并两个容器.

(或者TreeSet::new如果您特别想要,请使用TreeSet)

  • 我添加了一个简短的解释和3参数收集javadoc的链接.我认为它比我能解释得更好.看看这对你有意义 (2认同)