我正在尝试对一个类中从集合流式传输的两个变量之和求和。考虑下面的简单类。
class Widget {
String colour;
Double legs;
Double arms;
// ...
}
我想流式微件的集合,将它们按颜色分组,然后计算(腿和手臂)的总和,以找到每种颜色的肢体总数。
我想做些简单的事情-
widgets.stream().collect(groupingBy(Widget::getColour, summingDouble(legs + arms)));
但是,没有收集器功能可以让我指定自定义值进行求和。
我的问题是:我需要编写自定义收集器,还是有另一种简单的方法来实现我想要的?
答案 0 :(得分:3)
您也可以在此处使用toMap
作为
Map<String, Double> colorToLimbsCount = widgets.stream()
.collect(Collectors.toMap(Widget::getColour,
widget -> widget.getArms() + widget.getLegs(), Double::sum));
在groupingBy
表示中,它看起来像:
Map<String, Double> colorToLimbsCount = widgets.stream()
.collect(Collectors.groupingBy(Widget::getColour,
Collectors.reducing((double) 0,
widget -> widget.getArms() + widget.getLegs(), Double::sum)));
答案 1 :(得分:3)
您可以只使用Collectors.summingDouble()
:
Map<String, Double> result = widgets.stream()
.collect(Collectors.groupingBy(
Widget::getColour,
Collectors.summingDouble(w -> w.getArms() + w.getLegs())
));
您可以仅使用函数w -> w.getArms() + w.getLegs()
对手臂和腿进行求和。