java实现按字段分组_java7&java8针对集合中对象的某一个字段分组

本文介绍了在Java7及Java8环境下实现数据分组的方法。Java8利用Stream API结合Collectors工具类提供简洁高效的分组方案。而Java7则借助Guava库中的LinkedListMultimap实现同样功能。通过实例演示了按单个或多个字段分组的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中很多地方都会用到分组,提到分组,最简单的就是用java8的stream,但是有些条件下(比方说我,今天)用的java7....fuck..

java8用起来比较方便

根据普通单个字段

//假设传入一个非空订单集合

List orderList;

//想要按照订单号分组

Map> collect = orderList.stream()

.collect(Collectors.groupingBy(t -> t.getTradeNo()));

根据多个字段

//假设传入一个非空订单集合,想要根据订单号和userId进行分组

@Data

@AllArgsConstructor

@EqualsAndHashCode

class UserTrade{

private String userId;

private String tradeNo

}

List orderList;

//分组

Map> collect = orderList.stream().

collect(Collectors.groupingBy(new Function() {

@Override

public UserTrade apply(BaseOrder baseOrder) {

return new UserTrade(baseOrder.getUserId(), baseOrder.getTradeNo());

}

}));

java7

核心:核心用到的是guava的LinkedListMultimap类.此类可以针对单个key,放多个value,这些value会组成一个list

//假设传入一个非空订单集合,想要根据订单号和userId进行分组

@Data

@AllArgsConstructor

@EqualsAndHashCode

class UserTrade{

private String userId;

private String tradeNo

}

//分组

List orderList;

LinkedListMultimap multimap = LinkedListMultimap.create();

for(BaseOrder baseOrder:orderList){

multimap.put(new UserTrade(baseOrder.getUserId(),baseOrder.getTradeNo()),baseOrder);

}

List orders = multimap.get(new UserTrade("123","123"))

以上是基于java8和java7的两种不同的分组方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值