2017-04-04 103 views
4

我有List<StudentRecord> records包含StudentRecord實例。如何使用Collectors.toMap獲取Map <Integer,Integer>?

public class StudentRecord { 

private String lastName; 
private String firstName; 
private int mark; 

//constructor + getters 
} 

如何使Map<Integer,Integer>,作爲密鑰具有標記和值,在記錄列表標記occurances的數量?注意:我必須使用這種方法toMap

我已經嘗試過這個自己: Map<Integer,Integer>mapaPoOcjenama2= records.stream() .collect(Collectors.toMap(StudentRecord::getMark, Collectors.counting(), mergeFunction));

但我現在肯定Collectors.counting()如何工作,不知道寫什麼作爲合併功能。

+6

你想使用'Collectors.groupingBy(r - > r.getMark(),Collectors.counting());'不是映射哪個是每個鍵的一個值 –

+0

我的任務是根據指定使用toMap。 –

+6

在這種情況下,你可以使用'Collectors.toMap(StudentRecord :: getMark,1,(a,b) - > a == null?b:a + b)',儘管我不會那麼做,因爲它很複雜。 –

回答

4

那是相當容易與toMap

collect(Collectors.toMap(StudentRecord::getMark, 
     s -> 1, 
     (left, right) -> left + right)); 

第一個參數是一個Function,在地圖的Key映射。

第二個是Function,它映射地圖中的Value。由於您需要對它們進行計數,因此它將始終返回1.

第三個是BiFunction,它說明如何在兩個鍵相同的情況下合併兩個鍵。既然你要數數,你會一直增加1。

相關問題