首先我还是吐吐槽,话说题主你也不给一个期盼的结果,你问题的描述在我看来其实不太清楚你想要什么结果,我指的是具体的返回类型,看了你下面自己的答复,才知道你想要个map,虽然这个可能在你看来无伤大雅,但是我觉得又不是回答什么方案问题,你肯定是希望有一种代码写法,并且可以执行的,那给一个输入+输出的格式不好么,因为只要确认了输入输出,其实起码对于我们帮你想办法的人来说,就可以限定了很多写法和不必要的思考方向了,节约的大家的时间◐▽◑

还是言归正传,说说我自己的想法,这类问题其实我记得我也回答了几个了叭。。。

一般我的思路即: 当没有合适我需求的jdk stream api提供时,都采用自定义Collector的方式解决

题主的输入为List,输出为Map,而jdk中提供的返回map的一般也是Collectors.toMap,Collectors.groupBy,但是他们都不太符合题主的需求,因此还是自定义Collector的方式比较简单直接,当然题主已经给了一个回答了,在只要完成需求的目标前提下,其实都是可以的,所以我下面这种Collector只是算提供另一个思路吧(如果从使用角度来说,Collector使用起来相对简单)

@RequiredArgsConstructor

public class CustomSumByFieldCollector implements Collector, Map> {

private final List fieldNames;

private static final BiFunction GET_VALUE_FUN = (beanMap, fieldName) -> {

Double value = (Double) beanMap.getOrDefault(fieldName, Double.valueOf(0d));

return new BigDecimal(value);

};

@Override

public Supplier> supplier() {

return HashMap::new;

}

@Override

public BiConsumer, Entity> accumulator() {

return (map, entity) -> {

BeanMap beanMap = BeanMap.create(entity);

fieldNames.forEach(fieldName -> map.merge(fieldName, GET_VALUE_FUN.apply(beanMap, fieldName), BigDecimal::add));

};

}

@Override

public BinaryOperator> combiner() {

return (map1, map2) -> {

map1.putAll(map2);

return map1;

};

}

@Override

public Function, Map> finisher() {

return Function.identity();

}

@Override

public Set characteristics() {

return Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_FINISH));

}

}

上面有用到BeanMap是spring-core里的一个工具类,就是把entity转换为map,当然你可以使用其他的转换工具,例如apache的BeanUtils

而使用这个Collector的时候,直接new一个CustomSumByFieldCollector即可

public static void main(String[] args) {

List list = new ArrayList<>();

List keyList = Arrays.asList("t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10", "t11", "t12", "amount");

Map map = list.stream().collect(new CustomSumByFieldCollector(keyList));

}

由于题主也没有给测试用例,我也懒得写了哈,见谅,哈哈哈哈(* ̄ω ̄),所以这个代码没有测过,不过思路这样的,一般自定义Collector可以解决100%的stream收集问题,起码对我来说100%,哈哈哈,谁用谁说好,如果你对于自定义Collector不太清楚,可以看一下我很早之前的一个说明吧

Java8 collector接口的定制实现

拜了个拜ヾ( ̄▽ ̄)

java 分组求和函数_java8 怎么精简分组求和相关推荐

  1. java 相加的函数_Java8 Collectors求和功能的自定义扩展操作

    业务中需要将一组数据分类后收集总和,原本可以使用Collectors.summingInt(),但是我们的数据源是BigDecimal类型的,而Java8原生只提供了summingInt.summin ...

  2. java的求和函数_Java Stream流之求和的实现

    BigDecimal: BigDecimal bb =list.stream().map(Plan::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add ...

  3. 用java实现combin函数_Java8的CompletableFuture

    Java8的CompletableFuture Java8提供了一种函数风格的异步和事件驱动编程模型CompletableFuture,该模型不同于以往Java版本,不会造成堵塞Blocking.过去 ...

  4. 用java实现combin函数_Java8的CompletableFuture进阶之道

    简介 作为Java 8 Concurrency API改进而引入,本文是CompletableFuture类的功能和用例的介绍.同时在Java 9 也有对CompletableFuture有一些改进, ...

  5. java 内置函数_java8 四大内置核心函数式接口

    其他补充接口: 一.Consumer:消费型接口(void accept(T t)) 来看一个简单得例子: 1 /** 2 * 消费型接口Consumer 3 */ 4 @Test 5 public ...

  6. java sql sum函数的使用方法_SQL常用汇总函数用法说明

    1.汇总分析 汇总函数 (1)count(列名):求某列的行数,不包含空值. (2)sum(列名):对某列数据进行求和,只能对数值类型的列计算. (3)avg(列名):求某列数据的平均值,只能对数值类 ...

  7. Java-List集合字段求和函数

    文章目录 一.FunctionCustom通用求和函数使用示例 二.求和函数 一.FunctionCustom通用求和函数使用示例 特点: 简化代码量 防止集合及值的空指针 // 实例化函数 Func ...

  8. sql 纵向求和_SQL中求和函数SUM()的应用实例

    SQL中的求和函数SUM( )用于对数据求和,返回选取结果集中所有值的总和.下面将为您介绍求和函数SUM( )的语法和应用的实例,供您参考. 语法如下. SELECT          SUM(col ...

  9. 怎么计算机求和错误的,《表格计算求和错误怎么办》 为什么EXCEL公式求和会有错误...

    Excel自动求和为什么是错的 就是位数的问题,虽示的位数是两位,实际后面还是有多数存在的,比如2.55 2.35,你觉得会是多少?4.90对吧是事实上2.55可能是2.554,2.35也可能是2.3 ...

  10. 分组求和计算_excel聚合、累计、分组累计、分组聚合函数

    1.excel使用函数前须知: F1键:获取帮助:F4键:切换相对引用和绝对引用:锁定行:=A$1:锁定列:=$A1:锁定行和列:=$A$1:拼接:& 2.excel基本聚合函数: count ...

最新文章

  1. 2021年AI关键趋势,AI芯片初创公司可能发生并购
  2. Php-SPL库中的迭代器类详解(转)
  3. linux中ls命令
  4. 2021东营市地区高考成绩排名查询,东营高中学校实力排名,2021年东营所有的高中分数线排名...
  5. 安卓代码拉下来编译后怎么运行_支付宝秒开是因为用了方舟编译器?官方回应...
  6. 张小龙的小程序革命,复盘731天,用“小”来改变这个世界
  7. Python——函数 8、可变长参数
  8. vs2013update4 vs-mda-remote cordova真机测试ios
  9. 编程实战一通讯录程序
  10. 【转】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型...
  11. UART/I2C/SPI/1-wire四大通信接口的神解释
  12. Python中对字符串进行Url加解密操作
  13. 数量场的等值面与矢量场的矢量线的一些基本的东西(写得不好)
  14. 〖Demo〗-- 基于RabbitMQ rpc实现的主机管理
  15. Linux中进程与线程的概念以及区别
  16. IPTV机顶盒刷机过程--山东电信【天邑TY608】
  17. 实分析royden第四版答案_实分析(原书第4版)_[美]H.L.罗伊登(H.L.Royden) P.M.菲茨帕特里克(P.M.Fitzpatrick)_9787111630845_...
  18. PMP考试通过率怎么样?
  19. matlab 图像分割
  20. python代码雨_教你用200行Python代码“换脸”

热门文章

  1. jsp管理系统页面模板_管理后台原型设计分享- 政务管理系统
  2. Python进行Excel数据处理
  3. matlab dll 反编译,libmx.dll
  4. 如何在SVN创建分支版本
  5. 数学魔鬼表达式——第二天
  6. linux系统开启ssh端口号
  7. 有趣有用的PCA——PCA压缩图片
  8. C++信息学奥赛一本通_1020
  9. (学习笔记)读取PDF/OFD文件
  10. gsp计算机系统内审结论,GSP计算机系统内审表.docx