首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Collectors.groupingBy与map

Collectors.groupingBy与map
EN

Stack Overflow用户
提问于 2015-01-20 00:44:35
回答 2查看 3.2K关注 0票数 2

我在groupBy上挣扎着用双倍的计算来命名所有的人。

代码语言:javascript
复制
persons.stream()
                .map(p -> (p.getHeight() * p.getWeight()))
                .collect(Collectors.groupingBy(Person::getName)));

Stream<Double>不适用于这些论点。

如何处理整数/双值,然后处理groupBy字符串?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-20 01:28:48

一个可能的解决办法如下:

代码语言:javascript
复制
 persons.stream().collect(Collectors.groupingBy(
   Person::getName,
   HashMap::new,
   Collectors.mapping(
      p -> p.getHeight() * p.getWeight()
      Collectors.toList())));

或者,如果您不希望使用重复的名称,则可以使用简单得多的

代码语言:javascript
复制
persons.stream().collect(Collectors.toMap(
   Person::getName,
   p -> p.getHeight() * p.getWeight()));
票数 7
EN

Stack Overflow用户

发布于 2015-01-20 00:47:13

它不能工作,因为您的map正在将它从Person映射到IntegerDouble (取决于测量身高/体重的方法)。一旦完成了map调用,您实际上就有了一个数字流,因此不能将它们作为Person对象收集。

代码语言:javascript
复制
persons.stream() // Stream of Person objects
  .map(p -> (p.getHeight() * p.getWeight())) // Stream of numbers.

JavaDoc for Stream.map()确认了这一点:

返回一个流,该流由将给定函数应用于该流的元素的结果组成。

也许,如果我们更多地了解你对流的尝试,我们可以给你一个更直接的答案来解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28036025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档