gpt4 book ai didi

java - 流中的通用检查收集java

转载 作者:行者123 更新时间:2023-11-30 02:56:35 25 4
gpt4 key购买 nike

List<String> namesOfMaleMembersCollect = roster
.stream()
.filter(p -> p.getGender() == Person.Sex.MALE)
.map(p -> p.getName())
.collect(Collectors.toList());

我有这样的代码,其中 roster定义为List<Person> 。 JVM在哪个地方检查返回的List是否包含字符串?我的意思是我们已经定义了列表,但是没有关于退休值字符串的信息。这是:

.map(p -> p.getName())
.collect(Collectors.toList());

JVM看到的地方.map()获取 String 并知道 .collect() 返回的列表的类型会一样吗?

最佳答案

Type inference是一个强大的工具,附带 generics 。当您调用.map(p -> p.getName())时它返回 Stream<String> ,现在 Stream 的类型参数为 String 而不是 T .

现在您调用collect,它采用具有以下签名的Collector。

 <R, A> R collect(Collector<? super T, A, R> collector)

在这个案例中Stream<String>它将被推断为

Collector<String, ?, List<String>>

给我们List<String>

您可以将代码重写为以下内容

Collector<String, ?, List<String>> collector = Collectors.toList();

...map(p -> p.getName())
.collect(collector);

这意味着类型是根据结果分配给的变量的类型推断出来的。

关于java - 流中的通用检查收集java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37086658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com