gpt4 book ai didi

java - 减少对java中自定义对象的操作

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:29:00 27 4
gpt4 key购买 nike

如何使用 Reduce 操作对对象的两个字段执行求和。

例如

class Pojo
{
public Pojo(int a, int b) {
super();
this.a = a;
this.b = b;
}
int a ;
int b;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}

}

Pojo object1 = new Pojo(1, 1);
Pojo object2 = new Pojo(2, 2);
Pojo object3 = new Pojo(3, 3);
Pojo object4 = new Pojo(4, 4);

List<Pojo> pojoList = new ArrayList<>();

pojoList.add(object1);
pojoList.add(object2);
pojoList.add(object3);
pojoList.add(object4);

我可以像这样使用 IntStream 执行求和:

int sum = pojoList.stream()
.mapToInt(ob -> (ob.getA() + ob.getB()))
.sum();

我想使用 reduce 执行相同的操作,但不知何故我没有得到正确的语法:

pojoList.stream()
.reduce(0, (myObject1, myObject2) -> (myObject1.getA() + myObject2.getB()));

最佳答案

好吧,如果你想在 IntStream 上调用 reduce :

int sum = pojoList.stream()
.mapToInt(ob ->(ob.getA()+ob.getB()))
.reduce(0, (a,b)->a+b);

当然,同样适用于 Stream<Integer> :

int sum = pojoList.stream()
.map(ob ->(ob.getA()+ob.getB()))
.reduce(0, (a,b)->a+b);

或使用方法引用:

int sum = pojoList.stream()
.map(ob ->(ob.getA()+ob.getB()))
.reduce(0, Integer::sum);

或没有 map() :

int sum = pojoList.stream()
.reduce(0, (s,ob)->s+ob.getA()+ob.getB(),Integer::sum);

在最后一个示例中,我使用了变体:

<U> U reduce(U identity,
BiFunction<U, ? super T, U> accumulator,
BinaryOperator<U> combiner);

因为减少的值(Integer)与 Stream 的类型不同元素。

第一个参数是一个标识值 - 0。

第二个参数添加了getA()getB()当前的值 Pojo元素到中间和。

第三个参数结合了两个部分和。

关于java - 减少对java中自定义对象的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50582475/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com