欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

我就廢話不多說了,大家還是直接看代碼吧~

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
  }]
]

補充知識:java jdk1.8的stream復雜和簡單的分組

獲取List對象中的某個參數(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());

簡單參數(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()))
        ));

針對List復雜排序,多個條件進行排序:

應用場景:針對List中某個字段的數(shù)據(jù)進行雙重倒序的方式排序,代碼有點復雜,不明白的可以留言。

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流進行l(wèi)ist 分組歸類操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于單例模式懶漢式和餓漢式的區(qū)別及說明

    關(guān)于單例模式懶漢式和餓漢式的區(qū)別及說明

    這篇文章主要介紹了關(guān)于單例模式懶漢式和餓漢式的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java能寫爬蟲程序嗎

    java能寫爬蟲程序嗎

    在本篇文章里小編給大家整理的是一篇關(guān)于java是否能寫爬蟲程序的一篇文章,對此有興趣的朋友們可以學習下。
    2021-01-01
  • spring WebSocket示例詳解

    spring WebSocket示例詳解

    websocket是Html5新增加特性之一,目的是瀏覽器與服務端建立全雙工的通信方式,本篇文章主要介紹了spring WebSocket示例詳解 ,有興趣的可以了解一下。
    2017-01-01
  • Java微信公眾平臺之素材管理

    Java微信公眾平臺之素材管理

    這篇文章主要為大家詳細介紹了Java微信公眾平臺之素材管理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • JAVA實現(xiàn)雙邊決策的示例

    JAVA實現(xiàn)雙邊決策的示例

    本篇文章主要介紹了JAVA實現(xiàn)雙邊決策,介紹了雙邊決策的實現(xiàn)算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • 淺談Thread.sleep(0)到底有什么用

    淺談Thread.sleep(0)到底有什么用

    為什么要用sleep,主要是為了暫停當前線程,把cpu片段讓出給其他線程,減緩當前線程的執(zhí)行,本文主要介紹了Thread.sleep(0)到底有什么用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 解決使用RestTemplate時報錯RestClientException的問題

    解決使用RestTemplate時報錯RestClientException的問題

    這篇文章主要介紹了解決使用RestTemplate時報錯RestClientException的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • AI算法實現(xiàn)五子棋(java)

    AI算法實現(xiàn)五子棋(java)

    這篇文章主要為大家詳細介紹了AI算法實現(xiàn)五子棋,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 使用idea2017搭建SSM框架(圖文步驟)

    使用idea2017搭建SSM框架(圖文步驟)

    這篇文章主要介紹了使用idea2017搭建SSM框架(圖文步驟),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • MyBatis-Plus如何最優(yōu)雅最簡潔地完成數(shù)據(jù)庫操作

    MyBatis-Plus如何最優(yōu)雅最簡潔地完成數(shù)據(jù)庫操作

    Mybatis-Plus是一個?Mybatis?的增強工具,在?Mybatis?的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于MyBatis-Plus如何最優(yōu)雅最簡潔地完成數(shù)據(jù)庫操作的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評論