java8集合转实体,Java8 — 常用的集合转换与排序

为了方便演示创建了一个购物车商品类

@Data

public class ShoppingCartItem {

/**

* ID

*/

private Long id;

/**

* 卖家ID

*/

private Long sellerId;

/**

* 创建购物车商品时间

*/

private Date createdAt;

/**

* 修改购物车商品时间

*/

private Date updatedAt;

}

1.List 转 Map

很常见的场景就是从数据库按条件取出 List,但是因为业务需要需要维护List中相应的映射关系。比如我们需要按卖家 ID 为 Key 建立映射关系。

Map map = list.stream().collect(Collectors.toMap(e -> e.getBuyerId(), Function.identity()));

当Key重复时进行处理,当然可以定制 Function 去做相应的处理。

Map map = list.stream().collect(Collectors.toMap(e -> e.getSellerId(), Function.identity(), (e1, e2) -> e1));

2.List 转 Map

很显然上面的处理并不够好,我们总不能让一个商家只能显示一个商品吧,所以我们要把商家对应的商品聚合起来。

Map> collect = list.stream().collect(Collectors.groupingBy(e -> e.getSellerId()));

3.Map 转 List

// 将Map的Keys转换为List

List list1 = new ArrayList<>(map.keySet());

// 将Map的Values转换为List

List list2 = new ArrayList<>(map.values());

// stream 的方式,效率上低于直接构造方法的方式,应该是ArrayList的扩容机制影响的效率

List list3 = map.keySet().stream().collect(Collectors.toList());

4.对更新时间进行排序,并按卖家ID分组

很实际的一个功能,京东的购物车也是这样的

Map> collect = list.stream()

.sorted(Comparator.comparingLong((ShoppingCartItem c) -> c.getUpdatedAt().getTime()).reversed())

.collect(Collectors.groupingBy(ShoppingCartItem::getSellerId));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值