java 8
java8用起来比较方便
根据普通单个字段
//假设传入一个非空订单集合
List<BaseOrder> orderList;
//想要按照订单号分组
Map<String, List<BaseOrder>> collect = orderList.stream()
.collect(Collectors.groupingBy(t -> t.getTradeNo()));
根据多个字段
//假设传入一个非空订单集合,想要根据订单号和userId进行分组
@Data
@AllArgsConstructor
@EqualsAndHashCode
class UserTrade{
private String userId;
private String tradeNo
}
List<BaseOrder> orderList;
//分组
Map<UserTrade, List<BaseOrder>> collect = orderList.stream().
collect(Collectors.groupingBy(new Function<BaseOrder, UserTrade>() {
@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<BaseOrder> orderList;
LinkedListMultimap<UserTrade, BaseOrder> multimap = LinkedListMultimap.create();
for(BaseOrder baseOrder:orderList){
multimap.put(new UserTrade(baseOrder.getUserId(),baseOrder.getTradeNo()),baseOrder);
}
List<BaseOrder> orders = multimap.get(new UserTrade("123","123"))
以上是基于java8和java7的两种不同的分组方式
作者:H_Man
链接:https://www.jianshu.com/p/932...
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。