java 分组求和函数_java8 怎么精简分组求和
首先我还是吐吐槽,话说题主你也不给一个期盼的结果,你问题的描述在我看来其实不太清楚你想要什么结果,我指的是具体的返回类型,看了你下面自己的答复,才知道你想要个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 怎么精简分组求和相关推荐
- java 相加的函数_Java8 Collectors求和功能的自定义扩展操作
业务中需要将一组数据分类后收集总和,原本可以使用Collectors.summingInt(),但是我们的数据源是BigDecimal类型的,而Java8原生只提供了summingInt.summin ...
- java的求和函数_Java Stream流之求和的实现
BigDecimal: BigDecimal bb =list.stream().map(Plan::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add ...
- 用java实现combin函数_Java8的CompletableFuture
Java8的CompletableFuture Java8提供了一种函数风格的异步和事件驱动编程模型CompletableFuture,该模型不同于以往Java版本,不会造成堵塞Blocking.过去 ...
- 用java实现combin函数_Java8的CompletableFuture进阶之道
简介 作为Java 8 Concurrency API改进而引入,本文是CompletableFuture类的功能和用例的介绍.同时在Java 9 也有对CompletableFuture有一些改进, ...
- java 内置函数_java8 四大内置核心函数式接口
其他补充接口: 一.Consumer:消费型接口(void accept(T t)) 来看一个简单得例子: 1 /** 2 * 消费型接口Consumer 3 */ 4 @Test 5 public ...
- java sql sum函数的使用方法_SQL常用汇总函数用法说明
1.汇总分析 汇总函数 (1)count(列名):求某列的行数,不包含空值. (2)sum(列名):对某列数据进行求和,只能对数值类型的列计算. (3)avg(列名):求某列数据的平均值,只能对数值类 ...
- Java-List集合字段求和函数
文章目录 一.FunctionCustom通用求和函数使用示例 二.求和函数 一.FunctionCustom通用求和函数使用示例 特点: 简化代码量 防止集合及值的空指针 // 实例化函数 Func ...
- sql 纵向求和_SQL中求和函数SUM()的应用实例
SQL中的求和函数SUM( )用于对数据求和,返回选取结果集中所有值的总和.下面将为您介绍求和函数SUM( )的语法和应用的实例,供您参考. 语法如下. SELECT SUM(col ...
- 怎么计算机求和错误的,《表格计算求和错误怎么办》 为什么EXCEL公式求和会有错误...
Excel自动求和为什么是错的 就是位数的问题,虽示的位数是两位,实际后面还是有多数存在的,比如2.55 2.35,你觉得会是多少?4.90对吧是事实上2.55可能是2.554,2.35也可能是2.3 ...
- 分组求和计算_excel聚合、累计、分组累计、分组聚合函数
1.excel使用函数前须知: F1键:获取帮助:F4键:切换相对引用和绝对引用:锁定行:=A$1:锁定列:=$A1:锁定行和列:=$A$1:拼接:& 2.excel基本聚合函数: count ...
最新文章
- 2021年AI关键趋势,AI芯片初创公司可能发生并购
- Php-SPL库中的迭代器类详解(转)
- linux中ls命令
- 2021东营市地区高考成绩排名查询,东营高中学校实力排名,2021年东营所有的高中分数线排名...
- 安卓代码拉下来编译后怎么运行_支付宝秒开是因为用了方舟编译器?官方回应...
- 张小龙的小程序革命,复盘731天,用“小”来改变这个世界
- Python——函数 8、可变长参数
- vs2013update4 vs-mda-remote cordova真机测试ios
- 编程实战一通讯录程序
- 【转】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型...
- UART/I2C/SPI/1-wire四大通信接口的神解释
- Python中对字符串进行Url加解密操作
- 数量场的等值面与矢量场的矢量线的一些基本的东西(写得不好)
- 〖Demo〗-- 基于RabbitMQ rpc实现的主机管理
- Linux中进程与线程的概念以及区别
- IPTV机顶盒刷机过程--山东电信【天邑TY608】
- 实分析royden第四版答案_实分析(原书第4版)_[美]H.L.罗伊登(H.L.Royden) P.M.菲茨帕特里克(P.M.Fitzpatrick)_9787111630845_...
- PMP考试通过率怎么样?
- matlab 图像分割
- python代码雨_教你用200行Python代码“换脸”