gpt4 book ai didi

Java Stream collect - 如何推断类型?

转载 作者:行者123 更新时间:2023-11-30 06:45:40 24 4
gpt4 key购买 nike

我得到了一个单词流,Stream<String> words , 和一个类 Pair<String,Integer>它为 (someString, someInt) 实现了一个简单的元组两个元素的 getter 和 setter 方法称为 getFirst、setFirst、getSecond、setSecond。

我现在应该将流中的每个单词打包成一对 (word, 1) ,然后使用 Collector 以某种方式让整个事情告诉我每个单词在文本中出现的频率。现在我已经查找了一个 Collector,它应该让我做我想做的事,并将它作为 .collect(...) 传递给流。
但是整个事情看起来很复杂,并且在该主题中出现的类型推断和推导以及通配符并没有使它变得更容易,所以我现在不知道我创建了什么。

我已经尝试从 API 中推导出它,并尝试了所有我能想到的东西,但似乎没有一个匹配:

words
.map(x -> new Pair<String,Integer>(x,1))
.collect(Collectors.groupingBy(
x -> x.getFirst(),
Collectors.reducing(
(a,b) -> new Pair<String,Integer>(a.getFirst(), a.getSecond() + b.getSecond())
)
));

最佳答案

尝试使用 Collectors.toMap :

Collection<Pair<String, Integer>> values = words.collect(Collectors.toMap(
Function.identity(),
s -> new Pair<>(s, 1),
(a, b) -> {a.setSecond(a.getSecond() + b.getSecond()); return a;}
)).values();

它使用提供的内容从您的流创建 map :

  • keyMapper - 生成键的映射函数
  • valueMapper - 一个生成值的映射函数
  • mergeFunction - 一个合并函数,用于解决与同一键关联的值之间的冲突

因此它将您的 Pairs 按字符串值分组到一个映射中,然后您只需调用 .values() 即可获得 Pairs 的集合

关于Java Stream collect - 如何推断类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48492725/

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