我正在阅读List Java接口上的Oracle Java Tutorial并遇到以下语法:
List<String> list = people.stream().map(Person::getName).collect(Collectors.toList());
本教程仅提到它是一个将一些名称聚合到List但没有进一步解释的示例。我一直在努力理解这个陈述是如何起作用的。有人可以向我解释一下吗?
答案 0 :(得分:3)
people.stream()
创建Stream<Person>
。map()
指定。通过在其上调用Person
,流中的每个String
都将转换为getName()
。 Person::getName
语法是“方法引用”,在这种情况下类型为Function<Person,String>
。结果是Stream<String>
。 Collectors.toList()
创建Collector<String,?,List<String>>
。collect()
方法是终端操作;调用它会导致Stream
被评估。收集结果,生成新的List<String>
。答案 1 :(得分:1)
List<String> list =
people.stream() // gets a Stream<Person>
.map(Person::getName) // for each Person object call the getName() method - producing a Stream<String> of the result of that method call
.collect(Collectors.toList()); // collect that Stream<String> into a List, which is stored in the local variable declared as list
这可以强制写成
List<String> list = new ArrayList<>();
for (Person person : people) {
list.add(person.getName());
}