努力理解&#34; List <string> list = people.stream()。map(Person :: getName).collect(Collectors.toList());&#34;

时间:2016-03-11 00:09:28

标签: java list dictionary java-stream

我正在阅读List Java接口上的Oracle Java Tutorial并遇到以下语法:

List<String> list = people.stream().map(Person::getName).collect(Collectors.toList());

本教程仅提到它是一个将一些名称聚合到List但没有进一步解释的示例。我一直在努力理解这个陈述是如何起作用的。有人可以向我解释一下吗?

2 个答案:

答案 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());
}