java - 语法混淆:Set<String> set = people.stream().map(Person::getName).collect(Collectors.toCollection(TreeSet::new))

标签 java collections set java-8 java-stream

我正在尝试学习 Java Set界面,在网上遇到过如下代码,我理解这段代码的目的是转换一个Collection<Object>TreeSet , 但我不明白该语句是如何工作的,因为语法对我来说很复杂而且很陌生。有人可以逐步指导我完成整个过程吗?

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

还有,在什么样的情况下我们应该更喜欢上面的语法而不是下面的语法?

Set<Integer> s1 = new TreeSet(c1); //where c1 is an instance of Collection interface type

最佳答案

people.stream()

获取一组人并获得一个流。

.map(Person::getName)

获取人流并对每个人调用 getName 方法,返回包含所有结果的列表。这将“等同于”

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

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

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


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

关于java - 语法混淆:Set<String> set = people.stream().map(Person::getName).collect(Collectors.toCollection(TreeSet::new)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35907524/

相关文章:

python - 访问 collections.deque 长度的时间复杂度

java - Android - 尝试在 onCreate() 内调用另一个类的方法

java - 公共(public)静态无效是什么意思?什么是类(class)?

Java Try Catch finally 没有 Catch 的 block

C++ std::set 为什么它是关联的?

c++ - 检查 STL 中的空交集

MySQL集合存储

java - 尝试跳出 for 循环,但不断返回并执行递归调用

java - 使用 Java 集合的应用程序

.net - .NET 中是否有同时用作字典和列表的集合?