概述
java8 利用reduce实现将列表中的多个元素的属性求和并返回操作,本金,手续费,多个,列表,属性
java8 利用reduce实现将列表中的多个元素的属性求和并返回操作
易采站长站,站长之家为您整理了java8 利用reduce实现将列表中的多个元素的属性求和并返回操作的相关内容。
利用java8流的特性,我们可以实现list中多个元素的 属性求和 并返回。
案例:
有一个借款待还信息列表,其中每一个借款合同包括:本金、手续费;
现在欲将 所有的本金求和、所有的手续费求和。
我们可以使用java8中的函数式编程,获取list的流,再利用reduce遍历递减方式将同属性(本金、手续费)求和赋予给一个新的list中同类型的对象实例,即得到我们需要的结果:
A a = list.stream()
.reduce(
(x , y) -> new A( (x.getPrincipal() + y.getPrincipal()), (x.getFee() + y.getFee()) ) )
.orElse( new A(0, 0) );
示例代码如下:
package org.byron4j.eight;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
public class ReduceTwoObjectAddProp {
class A{
int principal = 0;
int fee = 0;
public A(int principal, int fee) {
super();
this.principal = principal;
this.fee = fee;
}
public A() {
super();
// TODO Auto-generated constructor stub
}
public int getPrincipal() {
return principal;
}
public void setPrincipal(int principal) {
this.principal = principal;
}
public int getFee() {
return fee;
}
public void setFee(int fee) {
this.fee = fee;
}
@Override
public String toString() {
return "A [principal=" + principal + ", fee=" + fee + "]";
}
}
@Test
public void test() {
List list = new ArrayList();
list.add(new A(1, 2));
list.add(new A(100, 200));
A a = list.stream()
.reduce(
(x , y) -> new A( (x.getPrincipal() + y.getPrincipal()), (x.getFee() + y.getFee()) ) )
.orElse( new A(0, 0) );
System.out.println(a);
}
}
补充知识:在 Java 8 中如何使用 Stream.reduce() 对 BigDecimal 的列表求和?
在Java 8中,我们可以使用Stream.reduce()对BigDecimal的列表求和。
1. Stream.reduce()
Java示例,使用常规的for循环和stream.reduce()对BigDecimal值列表求和。
JavaBigDecimal.java
package com.mkyong;
import java.math.BigDecimal;
import java.util.LinkedList;
import java.util.List;
public class JavaBigDecimal {
public static void main(String[] args) {
List invoices = new LinkedList<>();
invoices.add(BigDecimal.valueOf(9.9));
invoices.add(BigDecimal.valueOf(1.0));
invoices.add(BigDecimal.valueOf(19.99));
invoices.add(BigDecimal.valueOf(0.2));
invoices.add(BigDecimal.valueOf(5.5));
// sum using a for loop
BigDecimal sum = BigDecimal.ZERO;
for (BigDecimal amt : invoices) {
sum = sum.add(amt);
}
System.out.println("Sum = " + sum);
// sum using stream
BigDecimal sum2 = invoices.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("Sum (Stream) = " + sum2);
}
}
输出量
Sum = 36.59
Sum (Stream) = 36.59
2.地图和缩小
BigDecimal Invoices清单中的所有BigDecimal 。
JavaBigDecimalObject.java
package com.mkyong;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;
import java.util.List;
public class JavaBigDecimalObject {
public static void main(String[] args) {
List invoices = Arrays.asList(
new Invoice("I1001", BigDecimal.valueOf(9.99), BigDecimal.valueOf(1)),
new Invoice("I1002", BigDecimal.valueOf(19.99), BigDecimal.valueOf(1.5)),
new Invoice("I1003", BigDecimal.valueOf(4.888), BigDecimal.valueOf(2)),
new Invoice("I1004", BigDecimal.valueOf(4.99), BigDecimal.valueOf(5)),
new Invoice("I1005", BigDecimal.valueOf(.5), BigDecimal.valueOf(2.3))
);
BigDecimal sum = invoices.stream()
.map(x -> x.getQty().multiply(x.getPrice())) // map
.reduce(BigDecimal.ZERO, BigDecimal::add); // reduce
System.out.println(sum); // 75.851
System.out.println(sum.setScale(2, RoundingMode.HALF_UP)); // 75.85
}
}
class Invoice {
String invoiceNo;
BigDecimal price;
BigDecimal qty;
public Invoice(String invoiceNo, BigDecimal price, BigDecimal qty) {
this.invoiceNo = invoiceNo;
this.price = price;
this.qty = qty;
}
public String getInvoiceNo() {
return invoiceNo;
}
public void setInvoiceNo(String invoiceNo) {
this.invoiceNo = invoiceNo;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public BigDecimal getQty() {
return qty;
}
public void setQty(BigDecimal qty) {
this.qty = qty;
}
}
输出量
75.851
75.85
以上这篇java8 利用reduce实现将列表中的多个元素的属性求和并返回操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易采站长站。以上就是关于对java8 利用reduce实现将列表中的多个元素的属性求和并返回操作的详细介绍。欢迎大家对java8 利用reduce实现将列表中的多个元素的属性求和并返回操作内容提出宝贵意见
最后
以上就是有魅力黑米为你收集整理的java 8 reduce求和,java8 利用reduce实现将列表中的多个元素的属性求和并返回操作...的全部内容,希望文章能够帮你解决java 8 reduce求和,java8 利用reduce实现将列表中的多个元素的属性求和并返回操作...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复