package com.test;import com.xbz.common.utils.XDateUtil;
import lombok.Data;import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;/*** @title 集合对象分组并组内编号* @description 应用场景 : 一组订单 , 按照天为单位分组 , 汇总每天下单的数量 , 并且每天的订单按照下单顺序依次编号*/
public class XTest1 {public static void main(String[] args) {List<Order> orderList = new ArrayList<>();Order o1 = new Order();o1.setCreateTime(1533000000000L);//2018-07-31 09:20:00o1.setCreateTimeDesc(XDateUtil.long2Str(o1.getCreateTime(), "yyyyMMdd"));orderList.add(o1);Order o2 = new Order();o2.setCreateTime(1533442332000L);//2018-08-05 12:12:12o2.setCreateTimeDesc(XDateUtil.long2Str(o2.getCreateTime(), "yyyyMMdd"));orderList.add(o2);Order o3 = new Order();o3.setCreateTime(1533443456000L);//2018-08-05 12:30:56o3.setCreateTimeDesc(XDateUtil.long2Str(o3.getCreateTime(), "yyyyMMdd"));orderList.add(o3);Order o4 = new Order();o4.setCreateTime(1533888888000L);//2018-08-10 16:14:48o4.setCreateTimeDesc(XDateUtil.long2Str(o4.getCreateTime(), "yyyyMMdd"));orderList.add(o4);Map<String, List<Order>> map = orderList.stream().collect(Collectors.groupingBy(Order::getCreateTimeDesc));//根据createTimeDesc进行分组map.values().forEach(value -> value.sort(Comparator.comparing(Order::getCreateTime)));map.values().forEach(value -> value.forEach(v -> v.setSerialNumber(value.indexOf(v) + 1)));//对每组的订单进行排序然后编号orderList = map.entrySet().stream().flatMap(v -> v.getValue().stream()).collect(Collectors.toList());//将处理后的map重新转换为listorderList.forEach(o -> System.out.println(o.getCreateTime() + " : " + o.getCreateTimeDesc() + " : " + o.getSerialNumber()));}
}@Data
class Order {private Long createTime;private String createTimeDesc;private Integer serialNumber;
}

JDK8利用Stream为集合对象分组并编号相关推荐

  1. JAVA8 利用stream流将一个对象集合转换成另一个对象集合

    // 从数据库中查询出的对象集合List<OperationStation> operationStations = operationStationJoinMapper.selectJo ...

  2. stream对多个字段分组_Java8 stream 中利用 groupingBy 进行多字段分组

    1.利用stream对数据进行分组并求和 public static void main(String[] args) { List items = Arrays.asList("apple ...

  3. JDK8之Stream新特性

    /***JDK8 Stream特性* Created by chengbx on 2018/5/27.* Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集 ...

  4. 讲一个常用的JDK8的STREAM超实用技巧

    JDK8的集合STREAM JDK8的Stream 背景 想暴富 开始操练代码 操练结局 总结使用技巧 JDK8的Stream JAVA开发小伙伴们应该使用JDK8好多年了, 但是STREAM有很多小 ...

  5. jdk 8 集合对象排序_使用JDK 8流在包装对象的集合和包装对象的集合之间转换

    jdk 8 集合对象排序 我发现使用基于Java的应用程序时, 装饰器和适配器有时会很有用. 这些"包装器"在各种情况下都能很好地工作,并且相当容易理解和实现,但是当需要包装对象的 ...

  6. JDK8的Stream操作你还不会用吗?

    Stream介绍 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象.Stream API可以极大提高Java程序员的生产力,让程序员 ...

  7. JDK8特性--Stream(list转map)

    JDK8特性--Stream(求和,过滤,排序)   这里是其他一些stream的有用法,有需要的可以看看. 言归正传,现在主要是是学习list转map,使用的方法是Stream中Collectors ...

  8. 【Oracle报错】ORA-01795: 列表中的最大表达式数为 1000 问题解决(使用JDK8的 stream 实现)

    1. 问题说明 -- 类似这种 SQL SELECT * FROM tableName WHERE tableField IN ('','') 姑且不说这种 SQL 的效率和可优化和替代性,就当前问题 ...

  9. jaxb list集合对象_JAXB –表示空集合和空集合

    jaxb list集合对象 示范代码 以下演示代码将用于Java模型的所有不同版本. 它只是将一个集合设置为null,第二个设置为空列表,第三个设置为填充列表. package package blo ...

最新文章

  1. POJ 2449 Remmarguts' Date(k短路模板)
  2. 1711: [Usaco2007 Open]Dingin吃饭
  3. 怎么看so文件是哪个aar引进来的_运城人才引进7月5号面试
  4. -32767转化为二进制_谁说前端不需要懂二进制
  5. 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )...
  6. 12.TCP的成块数据流
  7. 二级公共基础之——数据结构与算法
  8. SQL SERVER 修改字段长度
  9. GPS从入门到放弃(十六)、卫星时钟误差和卫星星历误差
  10. python阿拉伯数字转中文_阿拉伯数字转化为中文数字
  11. java9 javascript_[Java教程]9最好的JavaScript压缩工具
  12. 2018年视频云服务市场格局进入整合阶段,阿里云视频云位居市场竞争力领导者的位置
  13. 键盘的工作原理和分类
  14. java七牛获取访问路径_七牛回调及回调鉴权
  15. 深爱的妻子出轨(转贴)
  16. Jmeter安装配置详细教程
  17. 读《反脆弱性》:凹凸性资料搜集
  18. 求1到100之间的素数
  19. Linux驱动——PCI
  20. Flash XSS 学习整理

热门文章

  1. [luoguP1005] 矩阵取数游戏(DP + 高精度)
  2. Linux课题实践一
  3. [蓝桥杯历届试题] 国庆星期日
  4. asp.net request获取url各个部分
  5. 让数据窗口的标题栏在选中后显示为蓝色
  6. SQL存储过程:取出自定义条数的数据
  7. [jQuery原理] jQuery属性操作相关方法
  8. 7-121 删除字符串中的子串 (20 分)
  9. java web中出现莫名错误,出现错误标识和红线但不影响运行。
  10. 删除html中所有的脚本,从HTML内容中删除脚本标记