原文
java 8
java8用起来比拟不便
依据一般单个字段
//假如传入一个非空订单汇合List<BaseOrder> orderList;//想要依照订单号分组Map<String, List<BaseOrder>> collect = orderList.stream() .collect(Collectors.groupingBy(t -> t.getTradeNo()));
依据多个字段
//假如传入一个非空订单汇合,想要依据订单号和userId进行分组@Data@AllArgsConstructor@EqualsAndHashCodeclass 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@EqualsAndHashCodeclass 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...
起源:简书
著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。