我想创建对象MyObject的实例,其中的每个字段都是该字段值的总和
我创建一个对象
public class MyObject{
int value;
double length;
float temperature;
MyObject(int value, double length, float temperature){
this.value = value;
this.length = length
this.temperature = temperature
}
}
然后我构建对象列表:
List<MyObject> list = new ArrayList<MyObject>{{
add(new MyObject(1, 1d, 1.0f));
add(new MyObject(2, 2d, 2.0f));
add(new MyObject(3, 3d, 3.0f));
}}
我想要创建对象(new MyObject(6,6d,6f)
)
很容易对每个流求和一个字段:
Integer totalValue = myObjects.parallelStream().mapToInt(myObject -> myObject.getValue()).sum(); //returns 6;
或
Double totalLength = myObjects.parallelStream().mapToDouble(MyObject::getLength).sum(); //returns 6d
然后构造对象新的MyObject(总值、总长度、总温度)
但我能把一个流中的所有字段相加吗?我想让stream回来
new MyObject(6, 6d, 6.0f)
你可以试试下面这样的
MyObject me = new MyObject(
list.stream().mapToInt(MyObject::getValue).sum(),
list.stream().mapToDouble(MyObject::getLength).sum(),
(float)list.stream().mapToDouble(MyObject::getTemperature).sum());
这会满足你的需要。你也可以使用Stream。减少做同样的事情。
它是reduce
方法的直接应用:
Stream.of(new MyObject(1, 1d, 1.0f), new MyObject(2, 2d, 2.0f), new MyObject(3, 3d, 3.0f)).
reduce((a, b) -> new MyObject(a.value + b.value, a.length + b.length, a.temperature + b.temperature))
其他解决方案是有效的,但它们都会产生不必要的开销;一个是通过多次复制MyObject
,另一个是通过多次流式传输集合。如果MyObject
是可变的,理想的解决方案是使用collect()
进行可变的缩减:
// This is used as both the accumulator and combiner,
// since MyObject is both the element type and result type
BiConsumer<MyObject, MyObject> reducer = (o1, o2) -> {
o1.setValue(o1.getValue() + o2.getValue());
o1.setLength(o1.getLength() + o2.getLength());
o1.setTemperature(o1.getTemperature() + o2.getTemperature());
}
MyObject totals = list.stream()
.collect(() -> new MyObject(0, 0d, 0f), reducer, reducer);
这个解决方案只创建一个额外的MyObject
实例,并且只迭代列表一次。
我有这样的想法: 我怎么能把它写在一个流中呢?收集f.e.
我正在尝试对List的字段求和并返回值。我想为此使用流,但我对流不熟悉,不确定流是否可以完成此操作。这是我尝试过的,但我认为语法不正确。 上下文的相关类结构。 获取总价和单价方法
问题内容: 假设有一个Obj类 并且您有一个实例列表,即。 现在,如何在Java8中使用过滤条件从流中找到列表中的对象的int字段值的总和(例如,对于object ,条件为)? 问题答案: 你可以做 或(使用方法参考)
本文向大家介绍PowerShell 每个对象,包括了PowerShell 每个对象的使用技巧和注意事项,需要的朋友参考一下 示例 该ForEach-Objectcmdlet的工作原理类似于该foreach语句,但从管道中获取其输入。 基本用法 例: Foreach-Object有两个默认别名,foreach和%(简写语法)。最常见的是%因为foreach可以与foreach语句混淆。例子: 高级用
问题内容: 假设我有一个这样的Json对象: 为了帮助我阅读它,我将Jackson的Object Mapper与以下类一起使用: 我的问题是,(使用最简单的解释)对象映射器如何“反序列化” Json对象?我以为它与变量名匹配,但是将它们更改几个字母不会影响输出。然后,我尝试切换set()函数的顺序,但没有做任何事情。我也尝试过两者,但这也没用。我猜这里还有一些更复杂的东西,但是呢? 我试图查看文档
我试图实现列表中对象值的累积和。 对象如下所示: 我有一份清单 结果也应该是一个列表 如何使用Java流API实现它? 输入示例为: 所需输出为: