对语法的困惑:Set <string> set = people.stream()。map(Person :: getName).collect(Collectors.toCollection(TreeSet :: new))

时间:2016-03-10 04:20:22

标签: java collections set java-8 java-stream

我正在尝试学习Java make clean界面并在线遇到以下代码,我了解此代码的目的是将Set转换为Collection<Object> ,但我不明白该语句是如何工作的,因为语法对我来说很复杂和陌生。有人可以一步一步地引导我完成整个过程吗?

TreeSet

而且,在什么样的情况下,我们更喜欢上面的语法?

Set<String> set = people.stream()
                        .map(Person::getName)
                        .collect(Collectors.toCollection(TreeSet::new));

2 个答案:

答案 0 :(得分:3)

people.stream()

接受一组人并获得一个流。

.map(Person::getName)

接受一个人流并在每个人上调用getName方法,返回包含所有结果的列表。这将是&#34;等同的&#34;到

for(Person person : people){
    setOfNames.add(person.getName())
}

.collect(Collectors.toCollection(TreeSet::new));

获取字符串流并将其转换为集合。

当您需要应用多个转换时,这些流非常有用。如果你使用并行流,它们也可以很好地执行,因为每个转换(在你的情况下每个getName)可以并行而不是顺序完成。

答案 1 :(得分:1)

peopele.stream()创建一个元素流 .map(Person :: getName)从人员集合中获取每个对象并调用getName,然后转换为字符串 .collect(Collectors.toCollection(TreeSet :: new)) - 收集这些String元素并从中创建一个TreeSet。

希望明确