我在groupBy上挣扎着用双倍的计算来命名所有的人。
persons.stream()
.map(p -> (p.getHeight() * p.getWeight()))
.collect(Collectors.groupingBy(Person::getName)));但Stream<Double>不适用于这些论点。
如何处理整数/双值,然后处理groupBy字符串?
发布于 2015-01-20 01:28:48
一个可能的解决办法如下:
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()));发布于 2015-01-20 00:47:13
它不能工作,因为您的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()确认了这一点:
返回一个流,该流由将给定函数应用于该流的元素的结果组成。
也许,如果我们更多地了解你对流的尝试,我们可以给你一个更直接的答案来解决这个问题。
https://stackoverflow.com/questions/28036025
复制相似问题