最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類(lèi)操作

 更新時(shí)間:2020年10月10日 11:05:39   作者:java客棧的小二  
這篇文章主要介紹了java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類(lèi)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

我就廢話(huà)不多說(shuō)了,大家還是直接看代碼吧~

import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @author czw
 */
public class Foo{
  private String name;
  private String type;
  private Double typeValue;
  private Integer count;
  public Foo(String name, String type, Double typeValue, Integer count) {
    this.name = name;
    this.type = type;
    this.typeValue = typeValue;
    this.count = count;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getType() {
    return type;
  }
  public void setType(String type) {
    this.type = type;
  }
  public Double getTypeValue() {
    return typeValue;
  }
  public void setTypeValue(Double typeValue) {
    this.typeValue = typeValue;
  }
  public Integer getCount() {
    return count;
  }
  public void setCount(Integer count) {
    this.count = count;
  }
  @Override
  public String toString() {
    return "Foo{" +
        "name='" + name + '\'' +
        ", type='" + type + '\'' +
        ", typeValue=" + typeValue +
        ", count=" + count +
        '}';
  }
  public static void main(String[] args) {
    List<Foo> fooList = new ArrayList<Foo>();
    fooList.add(new Foo("A","san",1.0,2)) ;
    fooList.add( new Foo("A","nas",13.0,1)) ;
    fooList.add(new Foo("B","san",112.0,3)) ;
    fooList.add(new Foo("C","san",43.0,5)) ;
    fooList.add(new Foo("B","nas",77.0,7)) ;
    List<List<Foo>> groupList = new ArrayList<>();
    fooList.stream()
        .collect(Collectors.groupingBy(Foo::getName,Collectors.toList()))
        .forEach((name,fooListByName)->{
          groupList.add(fooListByName);
        });
    System.out.println(JSON.toJSONString(groupList));
  }
}

輸出結(jié)果

[
  [{
    "count": 2,
    "name": "A",
    "type": "san",
    "typeValue": 1
  }, {
    "count": 1,
    "name": "A",
    "type": "nas",
    "typeValue": 13
  }],
  [{
    "count": 3,
    "name": "B",
    "type": "san",
    "typeValue": 112
  }, {
    "count": 7,
    "name": "B",
    "type": "nas",
    "typeValue": 77
  }],
  [{
    "count": 5,
    "name": "C",
    "type": "san",
    "typeValue": 43
  }]
]

補(bǔ)充知識(shí):java jdk1.8的stream復(fù)雜和簡(jiǎn)單的分組

獲取List對(duì)象中的某個(gè)參數(shù)時(shí):

List<Map<String,String>> param = new ArrayList<>();
Map<String,String> map = new HashMap<>();
map.put("id","1213");
map.put("name","test");
List<String> strList = param.stream().map(key ->key.get("name")).collect(Collectors.toList());

簡(jiǎn)單參數(shù)分組:

List<DamoForm> damoformList = new ArrayList<>();
Map<String, Map<String, List<DamoForm>>> collect = damoformList.stream()
        .collect(Collectors.groupingBy(DamoForm::getId()))
        .entrySet()
        .stream()
        .collect(Collectors.toMap(
            entry -> entry.getKey(),
            entry -> entry.getValue().stream().collect(Collectors.groupingBy(DamoForm::getName()))
        ));

針對(duì)List復(fù)雜排序,多個(gè)條件進(jìn)行排序:

應(yīng)用場(chǎng)景:針對(duì)List中某個(gè)字段的數(shù)據(jù)進(jìn)行雙重倒序的方式排序,代碼有點(diǎn)復(fù)雜,不明白的可以留言。

List<DamoForm> damoformList = new ArrayList<>();
List<Map<String, Object>> result = damoformList.stream()
     .collect(Collectors.groupingBy(DamoForm::getPartClass))
     .entrySet()
     .stream()
     .sorted((o1, o2) -> {
       /*
        * 這里排序,任何有1的排在前,全部是0排在后
        */
        Integer sort1 = o1.getValue().stream().anyMatch(item -> item.getIsFlag() > 0) ? -1 : 1;
        Integer sort2 = o2.getValue().stream().anyMatch(item -> item.getIsFlag() > 0) ? -1 : 1;
        return sort1.compareTo(sort2);
     })
     .map(entry -> {
        Map<String, Object> map = Maps.newHashMapWithExpectedSize(2);
        map.put("repairItemTypeName", entry.getKey());
          /*
           * 這里排序,1排在前,0排在后
           */
          List<DamoVO> damoVOList = entry.getValue().stream()
              .sorted(Comparator.comparingInt(o -> (o.getIsFlag() * -1)))
              .collect(Collectors.toList());
          map.put("repairTypeList", itemDescFormList);
          return map;
     })
     .collect(Collectors.toList());

以上這篇java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類(lèi)操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring-boot 如何實(shí)現(xiàn)單次執(zhí)行程序

    spring-boot 如何實(shí)現(xiàn)單次執(zhí)行程序

    這篇文章主要介紹了spring-boot 實(shí)現(xiàn)單次執(zhí)行程序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • mybatis之BaseTypeHandler用法解讀

    mybatis之BaseTypeHandler用法解讀

    這篇文章主要介紹了mybatis之BaseTypeHandler用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 超詳細(xì)講解Java秒殺項(xiàng)目用戶(hù)驗(yàn)證模塊的實(shí)現(xiàn)

    超詳細(xì)講解Java秒殺項(xiàng)目用戶(hù)驗(yàn)證模塊的實(shí)現(xiàn)

    這是一個(gè)主要使用java開(kāi)發(fā)的秒殺系統(tǒng),項(xiàng)目比較大,所以本篇只實(shí)現(xiàn)了用戶(hù)驗(yàn)證模塊,代碼非常詳盡,感興趣的朋友快來(lái)看看
    2022-03-03
  • 使用SpringBoot創(chuàng)建一個(gè)RESTful API的詳細(xì)步驟

    使用SpringBoot創(chuàng)建一個(gè)RESTful API的詳細(xì)步驟

    使用 Java 的 Spring Boot 創(chuàng)建 RESTful API 可以滿(mǎn)足多種開(kāi)發(fā)場(chǎng)景,它提供了快速開(kāi)發(fā)、易于配置、可擴(kuò)展、可維護(hù)的優(yōu)點(diǎn),尤其適合現(xiàn)代軟件開(kāi)發(fā)的需求,幫助你快速構(gòu)建出高性能的后端服務(wù),需要的朋友可以參考下
    2025-01-01
  • Java設(shè)計(jì)模式之中介模式

    Java設(shè)計(jì)模式之中介模式

    這篇文章主要介紹了Java設(shè)計(jì)模式之中介模式,中介模式(Mediator?Pattern),屬于行為型設(shè)計(jì)模式,目的是把系統(tǒng)中對(duì)象之間的調(diào)用關(guān)系從一對(duì)多轉(zhuǎn)變成一對(duì)一的調(diào)用關(guān)系,以此來(lái)降低多個(gè)對(duì)象和類(lèi)之間的通信復(fù)雜性,需要的朋友可以參考下
    2023-12-12
  • Springboot中Jackson用法詳解

    Springboot中Jackson用法詳解

    Springboot自帶默認(rèn)json解析Jackson,可以在不引入其他json解析包情況下,解析json字段,下面我們就來(lái)聊聊Springboot中Jackson的用法吧
    2025-01-01
  • 一文講透為什么遍歷LinkedList要用增強(qiáng)型for循環(huán)

    一文講透為什么遍歷LinkedList要用增強(qiáng)型for循環(huán)

    這篇文章主要為大家介紹了為什么遍歷LinkedList要用增強(qiáng)型for循環(huán)的透徹詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 詳解Spring框架入門(mén)

    詳解Spring框架入門(mén)

    這篇文章主要介紹了詳解Spring框架入門(mén),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 淺析Android系統(tǒng)中HTTPS通信的實(shí)現(xiàn)

    淺析Android系統(tǒng)中HTTPS通信的實(shí)現(xiàn)

    這篇文章主要介紹了淺析Android系統(tǒng)中HTTPS通信的實(shí)現(xiàn),實(shí)現(xiàn)握手的源碼為Java語(yǔ)言編寫(xiě),需要的朋友可以參考下
    2015-07-07
  • Spring?框架中的?Bean?作用域(Scope)使用詳解

    Spring?框架中的?Bean?作用域(Scope)使用詳解

    Spring框架中的Bean作用域(Scope)決定了在應(yīng)用程序中創(chuàng)建和管理的Bean對(duì)象的生命周期和可見(jiàn)性。本文將詳細(xì)介紹Spring框架中的Bean作用域的不同類(lèi)型,包括Singleton、Prototype、Request、Session和Application,并解釋它們的特點(diǎn)和適用場(chǎng)景。
    2023-09-09

最新評(píng)論

山西省| 白朗县| 桂林市| 岢岚县| 盘山县| 奉新县| 金华市| 塘沽区| 临洮县| 宁城县| 德庆县| 昌邑市| 洛浦县| 陇西县| 开封市| 资阳市| 铁岭市| 类乌齐县| 栾川县| 若羌县| 松潘县| 牙克石市| 武清区| 龙南县| 巫溪县| 灵寿县| 柳林县| 云和县| 长岭县| 大姚县| 获嘉县| 高州市| 潮州市| 靖江市| 怀安县| 游戏| 永靖县| 永仁县| 古交市| 聂拉木县| 栾城县|