(ご注意:以下に、私がMixedScores
として、あなたの(現在は無名の)クラスにREFERE)
レッツ・A Collection<MixedScores>
を取り、あなたが尋ねとして構成Map<String, Map<Integer, Integer>>
を返すメソッドsumScores
を定義します。
ローカルクラスSingleScore
を使用すると、単一のMixedScores
インスタンスを複数のインスタンスに分割し、件名、userIdでグループ化し、最終的にすべてのスコアを合計することができます。コードで
:もちろん
Map<String, Map<Integer, Integer>> sumScores(Collection<MixedScores> scores) {
class SingleScore {
int userId;
String subject;
int score;
SingleScore(MixedScores mixedScores, String subject) {
this.userId = mixedScores.userId;
this.subject = subject;
this.score = mixedScores.score;
}
String getSubject() {
return subject;
}
int getUserId() {
return userId;
}
int getScore() {
return score;
}
}
return scores.stream()
.flatMap(x -> x.subjects.stream().map(subject -> new SingleScore(x, subject)))
.collect(groupingBy(SingleScore::getSubject,
groupingBy(SingleScore::getUserId, summingInt(SingleScore::getScore))));
}
、一部の輸入があります
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.summingInt;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
はあなたのためにこの仕事をしていますか?新しいクラスを作成せず
ニースによって提案されました。これまでに何を試しましたか? – Flown
クラス名を追加しました。 –