日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

collectors 求和_Collectors扩展接口 实现BigDecimal的相加

發布時間:2025/3/11 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 collectors 求和_Collectors扩展接口 实现BigDecimal的相加 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Collectors擴展接口 實現BigDecimal的相加

第一步創建 ToBigDecimalFunction接口

import java.math.BigDecimal;

@FunctionalInterface

public interface ToBigDecimalFunction {

BigDecimal applyAsBigDecimal(T value);

}

第二步 創建工具類 實現接口

import java.math.BigDecimal;

import java.util.Collections;

import java.util.Set;

import java.util.function.BiConsumer;

import java.util.function.BinaryOperator;

import java.util.function.Function;

import java.util.function.Supplier;

import java.util.stream.Collector;

public class CollectorsUtil {

static final Set CH_NOID = Collections.emptySet();

private CollectorsUtil() {

}

@SuppressWarnings("unchecked")

private static Function castingIdentity() {

return i -> (R) i;

}

/**

* Simple implementation class for {@code Collector}.

*

* @param

* the type of elements to be collected

* @param

* the type of the result

*/

static class CollectorImpl implements Collector {

private final Supplier supplier;

private final BiConsumer accumulator;

private final BinaryOperator combiner;

private final Function finisher;

private final Set characteristics;

CollectorImpl(Supplier supplier, BiConsumer accumulator, BinaryOperator combiner,

Function finisher, Set characteristics) {

this.supplier = supplier;

this.accumulator = accumulator;

this.combiner = combiner;

this.finisher = finisher;

this.characteristics = characteristics;

}

CollectorImpl(Supplier supplier, BiConsumer accumulator, BinaryOperator combiner,

Set characteristics) {

this(supplier, accumulator, combiner, castingIdentity(), characteristics);

}

@Override

public BiConsumer accumulator() {

return accumulator;

}

@Override

public Supplier supplier() {

return supplier;

}

@Override

public BinaryOperator combiner() {

return combiner;

}

@Override

public Function finisher() {

return finisher;

}

@Override

public Set characteristics() {

return characteristics;

}

}

public static Collector summingBigDecimal(ToBigDecimalFunction super T> mapper) {

return new CollectorImpl<>(() -> new BigDecimal[1], (a, t) -> {

if (a[0] == null) {

a[0] = BigDecimal.ZERO;

}

a[0] = a[0].add(mapper.applyAsBigDecimal(t));

}, (a, b) -> {

a[0] = a[0].add(b[0]);

return a;

}, a -> a[0], CH_NOID);

}

}

使用測試

import com.example.javademo.JavaDemoApplicationTests;

import com.example.javademo.pojo.Student;

import com.example.javademo.utils.DataUtils;

import org.junit.Test;

import java.math.BigDecimal;

import java.util.stream.Collectors;

public class TestBigDecimal extends JavaDemoApplicationTests {

@Test

public void testGroupByAfterBigdecimal(){

/*

自定義實現對分組后的集合,屬性為bigdecmal進行相加

*/

System.out.println(DataUtils.getData().stream().collect(Collectors.groupingBy(Student::getSchool,CollectorsUtil.summingBigDecimal(Student::getMoney))));

//歸約造作

BigDecimal reduce = DataUtils.getData().stream().map(Student::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);

System.out.println(reduce);

int sum = DataUtils.getData().stream().mapToInt(Student::getAge).sum();

System.out.println(sum);

}

}

總結

以上是生活随笔為你收集整理的collectors 求和_Collectors扩展接口 实现BigDecimal的相加的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。