簡體   English   中英

在 Java 8 中使用 Collectors.toMap 使用 LIst 映射

[英]Map with LIst using Collectors.toMap in Java 8

我喜歡將下面的代碼轉換為 java 流,

HashMap<String, List<Data>> heMap = new HashMap<String, List<Data>>();
for (Data heData : obj) {
    String id = heData.getData().getId() + heData.getPlanData().getCode()
            + heData.getPlanData().getId();
    if (!heMap.containsKey(id)) {
        CitizenHElist = new ArrayList<Data>();

        CitizenHElist.add(heData);
        heMap.put(id, CitizenHElist);

    } else {
        heMap.get(id).add(heData);
    }
}

我使用流嘗試了以下代碼,但我沒有成功。

heMap=obj.stream().collect(Collectors.toMap(t->getKey(t), obj.stream().collect(Collectors.toList())));

private String getKey(Data heData){
    String id = heData.getData().getId() + heData.getPlanData().getCode()
                    + heData.getPlanData().getId();
    return id;
}

這是groupingBy收集器的工作:

import static java.util.stream.Collectors.groupingBy;

Map<String, List<Data>> heMap = obj.stream().collect(groupingBy(d -> getKey(d)));

請注意,這將使用MapList一些未指定的實現。 目前,它恰好是HashMapArrayList ,但將來可能會改變。

不確定您的數據結構,但您想做如下所示的操作,這是有效的。

import java.util.*;
import java.util.stream.Collectors;
class Data {

    String stud_id;
    String stud_name;
    String stud_location;
    public Data(String string, String string2, String string3) {
    this.stud_id=string;
    this.stud_location=string2;
    this.stud_name=string3;
    }
    public Object getData() {
        return this.stud_id;
    }


}

class Temp3
{
    public static void main(String args[])
    {

        Map<String, List<Data>> heMap=new HashMap<String, List<Data>>();
        Data data1=new Data("1","11","111");
        Data data2=new Data("2","22","222");
        List<Data> obj=new ArrayList<Data>();
        obj.add(data1);
        obj.add(data2);
        for (Data heData : obj) 
        {
                    String id = "2";
                    if (!heMap.containsKey(id)) 
                    {
                        ArrayList<Data> CitizenHElist = new ArrayList<Data>();
                        CitizenHElist.add(heData);
                        heMap.put(id, CitizenHElist);
                    } 
                    else 
                    {
                        heMap.get(id).add(heData);

                    }

        }
        heMap=obj.stream().collect(Collectors.groupingBy(w -> w.stud_location));
        System.out.println(heMap);

    }
}

基於字段分組 -

import java.util.*;
import java.util.stream.*;
public class Main
{
  public static void main (String[]args)
  {
    System.out.println ("Hello World");

    List < Data > dataList = getDataList();

    System.out.println (dataList);

    Map < String, List < Data >> dataMap =
      dataList.stream ().collect (Collectors.groupingBy (d->d.code));

    System.out.println (dataMap);
  }

 static List < Data > getDataList(){
    List < Data > dataList = new ArrayList <> ();
    dataList.add (new Data (1, "Prince", "102"));
    dataList.add (new Data (2, "Rahul", "102"));
    dataList.add (new Data (3, "Sunny", "103"));
    dataList.add (new Data (4, "Mitul", "104"));
    dataList.add (new Data (5, "Amit", "105"));
    dataList.add (new Data (6, "Ashish", "105"));
    return dataList;
  }
}

class Data
{
   int id;
   String name;
   String code;
  public Data (int id, String name, String code)
  {
    this.id = id;
    this.name = name;
    this.code = code;
  }
  public String toString ()
  {
    return String.format ("id:%s,name:%s,code:%s", id, name, code);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM