java7&java8針對(duì)集合中對(duì)象的某一個(gè)字段分組

項(xiàng)目中很多地方都會(huì)用到分組,提到分組,最簡(jiǎn)單的就是用java8的stream,但是有些條件下(比方說(shuō)我,今天)用的java7....fuck..

java8用起來(lái)比較方便
  • 根據(jù)普通單個(gè)字段
//假設(shè)傳入一個(gè)非空訂單集合
List<BaseOrder> orderList;

//想要按照訂單號(hào)分組
Map<String, List<BaseOrder>> collect = orderList.stream()
        .collect(Collectors.groupingBy(t -> t.getTradeNo()));


  • 根據(jù)多個(gè)字段

//假設(shè)傳入一個(gè)非空訂單集合,想要根據(jù)訂單號(hào)和userId進(jìn)行分組
@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類.此類可以針對(duì)單個(gè)key,放多個(gè)value,這些value會(huì)組成一個(gè)list

//假設(shè)傳入一個(gè)非空訂單集合,想要根據(jù)訂單號(hào)和userId進(jìn)行分組
@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的兩種不同的分組方式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容