笔记--对List进行分组(java8的Stream 分组的groupBy 的使用)

对List进行分组(java8的Stream 分组的groupBy 的使用)

最近在做一个功能:对一个接口接收的List数据进行校验,同一个订单里的一个产品id只能添加一次。本来想是在入库的时候通过SQL语句进行处理的。但是由于这个数据接口之前同事写了很多的校验,是在是又*又长。在度娘上查一下,发现了JAVA8 可以通过Stream对List进行处理(这里主要是关于分组的);

Order order1 = new Order();
order1.setOrderId("123")Order1.setGoodsId("S1");

Order order2 = new Order();
order2.setOrderId("123")Order2.setGoodsId("S2");

Order order2 = new Order();
order2.setOrderId("1234")Order2.setGoodsId("S3");

List<Order> list =  new ArrayList();
List.add(order1);
List.add(order2);
List.add(order3);

Map<String,List<Order>> map = list.stream().collect(Collectors.groupingBy(ord -> ord.getOrderId));

其中Map<String,List> map 中的String 是 groupingBy里的属性;如果需要分组前进行判断,可以加个过滤;

Map<String,List<Order>> map = list.stream().filter(ord -> ord.getOrderId!= null)
.collect(Collectors.groupingBy(h -> h.getOrderID));

我要做的需要通过两个字段进行分组,所以我在groupingBy 里面加了两个字段;

Map<String,List<Order>> map = list.stream().collect(Collectors.groupingBy(ord -> ord.getOrderId+;+ ord.getOrderGoodsId()));

分组是按照groupingBy里面拼接的字段进行分组的,我这里加上";"主要是为了区分订单号和产品号;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值