JDK8利用Stream为集合对象分组并编号
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为集合对象分组并编号相关推荐
- JAVA8 利用stream流将一个对象集合转换成另一个对象集合
// 从数据库中查询出的对象集合List<OperationStation> operationStations = operationStationJoinMapper.selectJo ...
- stream对多个字段分组_Java8 stream 中利用 groupingBy 进行多字段分组
1.利用stream对数据进行分组并求和 public static void main(String[] args) { List items = Arrays.asList("apple ...
- JDK8之Stream新特性
/***JDK8 Stream特性* Created by chengbx on 2018/5/27.* Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集 ...
- 讲一个常用的JDK8的STREAM超实用技巧
JDK8的集合STREAM JDK8的Stream 背景 想暴富 开始操练代码 操练结局 总结使用技巧 JDK8的Stream JAVA开发小伙伴们应该使用JDK8好多年了, 但是STREAM有很多小 ...
- jdk 8 集合对象排序_使用JDK 8流在包装对象的集合和包装对象的集合之间转换
jdk 8 集合对象排序 我发现使用基于Java的应用程序时, 装饰器和适配器有时会很有用. 这些"包装器"在各种情况下都能很好地工作,并且相当容易理解和实现,但是当需要包装对象的 ...
- JDK8的Stream操作你还不会用吗?
Stream介绍 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象.Stream API可以极大提高Java程序员的生产力,让程序员 ...
- JDK8特性--Stream(list转map)
JDK8特性--Stream(求和,过滤,排序) 这里是其他一些stream的有用法,有需要的可以看看. 言归正传,现在主要是是学习list转map,使用的方法是Stream中Collectors ...
- 【Oracle报错】ORA-01795: 列表中的最大表达式数为 1000 问题解决(使用JDK8的 stream 实现)
1. 问题说明 -- 类似这种 SQL SELECT * FROM tableName WHERE tableField IN ('','') 姑且不说这种 SQL 的效率和可优化和替代性,就当前问题 ...
- jaxb list集合对象_JAXB –表示空集合和空集合
jaxb list集合对象 示范代码 以下演示代码将用于Java模型的所有不同版本. 它只是将一个集合设置为null,第二个设置为空列表,第三个设置为填充列表. package package blo ...
最新文章
- POJ 2449 Remmarguts' Date(k短路模板)
- 1711: [Usaco2007 Open]Dingin吃饭
- 怎么看so文件是哪个aar引进来的_运城人才引进7月5号面试
- -32767转化为二进制_谁说前端不需要懂二进制
- 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )...
- 12.TCP的成块数据流
- 二级公共基础之——数据结构与算法
- SQL SERVER 修改字段长度
- GPS从入门到放弃(十六)、卫星时钟误差和卫星星历误差
- python阿拉伯数字转中文_阿拉伯数字转化为中文数字
- java9 javascript_[Java教程]9最好的JavaScript压缩工具
- 2018年视频云服务市场格局进入整合阶段,阿里云视频云位居市场竞争力领导者的位置
- 键盘的工作原理和分类
- java七牛获取访问路径_七牛回调及回调鉴权
- 深爱的妻子出轨(转贴)
- Jmeter安装配置详细教程
- 读《反脆弱性》:凹凸性资料搜集
- 求1到100之间的素数
- Linux驱动——PCI
- Flash XSS 学习整理