我在用双打计算后努力groupBy
为所有人命名。
persons.stream()
.map(p -> (p.getHeight() * p.getWeight()))
.collect(Collectors.groupingBy(Person::getName)));
但Stream<Double>
不适用于这些参数。
如何处理整数/双精度然后再处理groupBy String?
答案 0 :(得分:5)
一种可能的解决方案如下:
persons.stream().collect(Collectors.groupingBy(
Person::getName,
HashMap::new,
Collectors.mapping(
p -> p.getHeight() * p.getWeight()
Collectors.toList())));
或者,如果您不希望重复名称,则可以使用更简单的
persons.stream().collect(Collectors.toMap(
Person::getName,
p -> p.getHeight() * p.getWeight()));
答案 1 :(得分:1)
它无法正常工作,因为您map
正在将其从Person
映射到Integer
或Double
,(取决于身高/体重的测量方式)。完成map
调用后,您实际上会有一个数字流,因此您无法将其作为Person
个对象收集。
persons.stream() // Stream of Person objects
.map(p -> (p.getHeight() * p.getWeight())) // Stream of numbers.
JavaDoc for Stream.map()证实了这一点:
返回一个流,该流包含将给定函数应用于此流的元素的结果。enter link description here
如果我们更了解您尝试使用流媒体的内容,我们可以就如何解决问题给您更直接的答案。