中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java jdk1.8 使用stream流實現list 分組歸類

發布時間:2020-10-28 18:55:44 來源:億速云 閱讀:840 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關java jdk1.8 使用stream流實現list 分組歸類,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

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));
  }
}

輸出結果

[
  [{
    "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對象中的某個參數時:

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());

簡單參數分組:

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中某個字段的數據進行雙重倒序的方式排序,代碼有點復雜,不明白的可以留言。

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) &#63; -1 : 1;
        Integer sort2 = o2.getValue().stream().anyMatch(item -> item.getIsFlag() > 0) &#63; -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流實現list 分組歸類了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永兴县| 犍为县| 宽城| 富阳市| 新安县| 东丰县| 溧阳市| 贡山| 犍为县| 巴彦淖尔市| 伽师县| 巨野县| 十堰市| 温宿县| 驻马店市| 乌拉特前旗| 高尔夫| 新余市| 中宁县| 漯河市| 大同市| 灌南县| 汉川市| 贵州省| 洛隆县| 旺苍县| 嵩明县| 平昌县| 澜沧| 历史| 曲麻莱县| 拉萨市| 宜君县| 陇川县| 淮阳县| 枝江市| 奈曼旗| 青铜峡市| 河池市| 阜新市| 吴旗县|