我是靠谱客的博主 有魅力黑米,最近开发中收集的这篇文章主要介绍java 8 reduce求和,java8 利用reduce实现将列表中的多个元素的属性求和并返回操作...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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实现将列表中的多个元素的属性求和并返回操作...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部