Java 8 Streams - 将来自流的类型中的多个值相加
Java 8 Streams - summing multiple values in a type from a stream
我正在尝试对从集合中流出的 class 中的两个变量求和。考虑以下简单的 class.
class Widget {
String colour;
Double legs;
Double arms;
// ...
}
我想流式传输一组 Widget,按颜色对它们进行分组,然后计算(腿 + 臂)的总和,找出每种颜色的肢体总数。
我想做一些简单的事情,像这样-
widgets.stream().collect(groupingBy(Widget::getColour, summingDouble(legs + arms)));
但是,没有允许我指定要求和的自定义值的 Collectors 函数。
我的问题是:我是否需要编写自定义收集器,或者是否有其他简单的方法来实现我想要的?
您也可以在这里使用 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)));
你可以直接使用 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()
求和手臂和腿。
我正在尝试对从集合中流出的 class 中的两个变量求和。考虑以下简单的 class.
class Widget {
String colour;
Double legs;
Double arms;
// ...
}
我想流式传输一组 Widget,按颜色对它们进行分组,然后计算(腿 + 臂)的总和,找出每种颜色的肢体总数。
我想做一些简单的事情,像这样-
widgets.stream().collect(groupingBy(Widget::getColour, summingDouble(legs + arms)));
但是,没有允许我指定要求和的自定义值的 Collectors 函数。
我的问题是:我是否需要编写自定义收集器,或者是否有其他简单的方法来实现我想要的?
您也可以在这里使用 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)));
你可以直接使用 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()
求和手臂和腿。