簡體   English   中英

取得清單 <String> 和HashMap <String, Object> 使用Java 8流

[英]Get List<String> and HashMap<String, Object> using Java 8 streams

這是我正在為項目工作的類似內容。 由於明顯的原因,類有所不同。 假設我有課

public class Division {
    String className;
    Map<String, Student> studentMap;
    // getters and setters      
}

public class Student {
    String fName;
    String lName;
    String id;
    // getters and setters
}

我有這些類的實例,如下所示:

Student s1= new Student("Lisa", "xyz", "12");
Student s2= new Student("John", "klm", "13");
Student s3= new Student("Lisa", "xyz", "14");

Division d1= new Division();
Division d2= new Division();

Map<String, Student> studentMap1= new HashMap<>();
studentMap1.put("key1", s1);
studentMap1.put("key2", s2);

Map<String, Student> studentMap2= new HashMap<>();
studentMap2.put("key3", s3);


d1.setStudentMap(studentMap1);
d2.setStudentMap(studentMap2);

List<Division> dList= Arrays.asList(d1, d2);

在這里,請注意,我們在HashMap中使用的鍵在整個數據庫中都是唯一的。 所以我可以用Java 7編寫這樣的內容來獲取所有的StudentMap

  1. 獲取所有學生的地圖

     Map<String, Student> allstudentsMap= new HashMap<>(); for(Division d: dList) { for(String key:d.getStudentMap().keySet()) { allstudentsMap.put(key, d.getStudentMap().get(key)); } } 
  2. 我還需要獲取某些過濾條件的鍵列表。 例如,獲取名稱為Lisa的學生的鑰匙清單。 我可以使用上面的HashMap獲取列表,如下所示:

     List<String> filterList= new ArrayList<>(); Student s; for(String key:allstudentsMap.keySet()) { s= allstudentsMap.get(key); if(s.getfName().equalsIgnoreCase("Lisa")) { filterList.add(key); } } 

我需要幫助才能使用Java 8流執行相同的操作。 1.獲取所有學生的地圖。2.獲取某個過濾條件的所有鍵的列表。

考慮到所有鍵都是唯一的 ,您可以將幾張地圖中的每個條目簡單地放入最終地圖中,如下所示:

Map<String, Student> allStudentsMap = new HashMap<>();
dList.forEach(d -> d.getStudentMap().forEach(allStudentsMap::put));

然后將filter應用於entrySet並收集相應的鍵:

List<String> filterList = allStudentsMap.entrySet().stream()
        .filter(e -> e.getValue().getfName().equalsIgnoreCase("Lisa"))
        .map(Map.Entry::getKey)
        .collect(Collectors.toList());

暫無
暫無

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

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