2017-04-04 3 views
4

StudentRecordのインスタンスを含むList<StudentRecord> recordsがあります。Collectors.toMapを使用してMap <Integer、Integer>を取得する方法?

public class StudentRecord { 

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

//constructor + getters 
} 

は、どのように私はキーがマークを持ち、値、レコードリストでマークoccurancesの数と同じことをMap<Integer,Integer>作るのですか?注:私はこのメソッドを正確に使用する必要がありますtoMap

私はこの自分自身試してみました: Map<Integer,Integer>mapaPoOcjenama2= records.stream() .collect(Collectors.toMap(StudentRecord::getMark, Collectors.counting(), mergeFunction));

をしかし、私は今Collectors.counting()がどのように動作するかを確認していマージ関数として書くために何を知りません。 toMapとにかなり簡単です

+6

あなたは 'Collectors.groupingBy(r - > r.getMark()、Collectors.counting());を使いたいと思います。toMapはキーごとに1つの値に対応します –

+0

私のタスクはtoMap to指定されたものです。 –

+6

その場合、 'Collectors.toMap(StudentRecord :: getMark、1、(a、b) - > a == null?b:a + b)'を使うことができます。 –

答えて

4

は:

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

最初の引数は、マップ内KeyをマップFunctionです。

ValueをマップにマップするFunctionです。それらを数える必要があるので、常に1を返します。

そして、3つ目はBiFunctionで、2つのキーが同じ場合にマージする方法を示しています。カウントしたいので、常に1ずつインクリメントします。

関連する問題