首页 > 解决方案 > collect方法的第三个参数(combiner)怎么用?

问题描述

我正在学习 lambda 表达式。从人员列表中,我想要另一个包含 20 岁以上人员的列表。

final List<Person> people = Arrays.asList(
        new Person("John", 10),
        new Person("Greg", 30),
        new Person("Sara", 20),
        new Person("Jane", 15));

 List<Person> olderThan20 =
        people.stream()
       .filter(person -> person.getAge() > 20)
                    .collect(ArrayList::new, 
                             ArrayList::add, 
                             ArrayList::addAll);

我的印象是只有前两个参数就足够ArrayList::newArrayList::add

在我的示例中如何以及何时使用第三个参数ArrayList::addAll

标签: javalambda

解决方案


这个问题的“正确”答案:使用collect(Collectors.toList()). collect()除非你必须这样做,否则使用 3 arg 版本根本没有意义。有关更多详细信息,请参见此处

有关如何使用这 3 个参数,请从此处collect()开始阅读。


推荐阅读