我们利用 java8 的新特性,可以方便简洁高效的处理一些集合的数据。

简单示例如下:

先定义一个订单对象(Order)

public class Order {

private Long id;

private Long userId;

private String num;

private String type;

private Float allAmt;

private Float payAmt;

private Integer orderNum;

public Order(Long id, Long userId, String num, String type, Float allAmt, Float payAmt, Integer orderNum) {

this.id = id;

this.userId = userId;

this.num = num;

this.type = type;

this.allAmt = allAmt;

this.payAmt = payAmt;

this.orderNum = orderNum;

}

// getting... setting...

}

过滤筛选:

List orders = Lists.newArrayList();

// 筛选总金额大于1000的订单

orders = orders.stream().filter(item -> item.getAllAmt() > 1000.00f).collect(Collectors.toList());

分组:

List orders = Lists.newArrayList();

// 按照订单类型分组

Map> orderGroupMap = orders.stream().collect(Collectors.groupingBy(Order::getType));

去重:

List orders = Lists.newArrayList();

// 按照订单编号去重

orders = orders.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()

-> new TreeSet<>(Comparator.comparing(Order::getNum))), ArrayList::new));

// 按照订单编号和类型去重

orders = orders.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()

-> new TreeSet<>(Comparator.comparing(o -> o.getNum() + ";" + o.getType()))), ArrayList::new));

List 转 Map :

List orders = Lists.newArrayList();

// 将订单集合转换成订单编号-应付金额 map,注意订单编号作为 key 不能重复,应先做去重处理

Map numPayMap = orders.stream().collect(Collectors.toMap(Order::getNum, Order::getPayAmt));

// 用 id 做 key 将 List 转成 Map

Map orderMap = orders.stream().collect(Collectors.toMap(Order::getId, item -> item));

排序:

List orders = Lists.newArrayList();

// 按照订单总金额从高到低排序

// 方式一

orders.sort((o1, o2)

-> o1.getAllAmt() == null ? 1 : (o2.getAllAmt() == null ? -1 : o2.getAllAmt().compareTo(o1.getAllAmt())));

// 方式二

orders.sort(Comparator.comparing(Order::getAllAmt, (o1, o2)

-> o1 == null ? 1 : (o2 == null ? -1 : o2.compareTo(o1))));

// 方式三 (allAmt 字段不能为 null, null 会导致排序失败)

orders.sort(Comparator.comparing(Order::getAllAmt).reversed());

// 先按照订单类型排序,再按照订单应付金额从高到低排序

orders.sort(Comparator.comparing(Order::getType, (o1, o2)

-> o1 == null ? 1 : (o2 == null ? -1 : o1.compareTo(o2))).thenComparing((o1, o2)

-> o1.getPayAmt() == null ? 1 : (o2.getPayAmt() == null ? -1 : o2.getPayAmt().compareTo(o1.getPayAmt()))));

统计计数:

List orders = Lists.newArrayList();

// 统计所有订单的总金额

// 求和

Double sum = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).sum();

// 最大总金额

OptionalDouble max = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).max();

// 防止没有订单数据的处理

Double maxAllAmt = max.isPresent() ? max.getAsDouble() : 0;

// 最小总金额

OptionalDouble min = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).min();

// 平均总金额

OptionalDouble average = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).average();

c# list集合根据某个字段去重_java8 List 根据对象某个字段或多个字段去重、筛选、List转Map、排序、分组、统计计数等等...相关推荐

  1. 数组转集合,集合去重, 删除对象List某个属性值为空的对象,MySql根据某一字段去重

    集合和数组的几个问题 一.数组怎么转集合 二.集合去重怎么做? 三.删除对象集合里,某个属性为空的对象 四.数据库查询数据如何按某一个字段去重 一.数组怎么转集合 String [] strArr = ...

  2. java list 分组数量_java8 集合 多字段 分组 统计个数代码

    1.user实体 package com.demo.dto; public class User { private Integer id; private String userName; priv ...

  3. 使用lambda去重、map排序、按任意时间间隔(小时、半小时、分钟)进行结果统计

    1.lambda去重 public static <T> Predicate<T> distinctByKey(Function<? super T, Object> ...

  4. 查询去重_如何在 1 秒内做到大数据精准去重?

    去重计数在企业日常分析中应用广泛,如用户留存.销售统计.广告营销等.海量数据下的去重计数十分消耗资源,动辄几分钟,甚至几小时,Apache Kylin 如何做到秒级的低延迟精确去重呢? 作者:史少锋, ...

  5. jdk8分组统计字段和_JDK 8流和分组

    jdk8分组统计字段和 我在JDK 8中的Stream-Powered Collections Functionality中介绍了将JDK 8的Streams与Java集合一起使用的强大功能. 我没有 ...

  6. java8怎么按照两个字段的乘积排序_django-orm F对象的使用 按照两个字段的和,乘积排序实例...

    class F F()是代表模型字段的值,也就是说对于一些特殊的字段的操作,我们不需要数据先取到内存中,然后操作,在存储到db中了. 以下为几个使用的经典场景: 1. 统计点击量,点赞(每次加1) f ...

  7. 千万数据去重_如何在 1 秒内做到大数据精准去重?

    去重计数在企业日常分析中应用广泛,如用户留存.销售统计.广告营销等.海量数据下的去重计数十分消耗资源,动辄几分钟,甚至几小时,Apache Kylin 如何做到秒级的低延迟精确去重呢? 什么是去重计数 ...

  8. set列表对象去重_java中List对象列表去重或取出以及排序

    面试碰到几次list的去重和排序.下面介绍一种做法: 1. list去重 1.1 实体类Student List容量10k以上,要求去重复.这里Student的重复标准是属性相同,因此需要重写equa ...

  9. kibana去重统计和分组统计

    新建可视化统计 选择数据表格展现方式 选择数据源 去重统计 举例:这里统计的是24小时内,请求config路径返回401的手机号数量 数据筛选条件 数据时间段条件 Aggregation:统计类型,选 ...

最新文章

  1. MM32F3277 MicroPython的 mem 函数对于MCU内存访问
  2. SVM+HOG:用初次训练的.xml分类器在负样本原图上检测生成HardExample样本
  3. 理解 JavaScript 闭包
  4. 程序员,35岁就可能被替换的职业,遇到好的领导多么重要
  5. ADF12C viewScope,pageFlowScope,requestScope,backingBeanScope
  6. 再见,你已经不再是程序员了
  7. 笔记72 高级SSM整合
  8. excel清空sheet内容 poi_Excel隐藏了一个sheet表,java poi中是可以读出来的,现在我不想读取隐藏的sheet表。...
  9. 英特尔新CEO上任后公布首份财报,数据中心业务同比下降20%
  10. 计算机一级wpsoffice知识,全国计算机一级WPSOffice考试试题
  11. 【Java web】Servlet面试题
  12. Java项目服务器cpu占用100%解决办法
  13. 站长开源工具箱V2.0网站源码
  14. 【应届生租房】应届生如何租房以及注意事项
  15. 3D坦克大战联网对战版课程设计报告
  16. vim/vi中的光标键会变成a,b,c,d的解决办法
  17. Win10问题篇:解决电脑连不上网的问题。
  18. sql语句执行顺序及简单优化
  19. 联想服务器系统蓝屏,联想电脑蓝屏并提示“STOP:0X0000007B的原因分析和解决方法...
  20. 16位流水线CPU设计(部分)

热门文章

  1. 华为云GaussDB:发挥生态优势,培养应用型DBA
  2. 聚焦LS-MIMO的四大层面,浅谈5G关键技术
  3. 云图说 | 华为云应用服务网格,让你的应用治理智能化、可视化
  4. python上下文管理器细读
  5. #华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库
  6. linux开放mysql远程连接_Linux开启MySql远程连接
  7. 设计模式笔记二:抽象工厂模式
  8. Android doc|Getting Started|部分 --转载 保存数据
  9. 谷歌发布MetNet神经网络模型预测天气
  10. Python面向对象编程三大特性之封装