値が地図である地図にグループ化するJava 8ストリーム機能

M06H:

値が地図です私は、リストの結果を収集し、地図にそれらを整理しようとしています:

private Map<Organisation, Map<LocalDate, Status>> getSummaries(final List<Status> summaries) {
    return summaries
            .stream()
            .collect(groupingBy(Status::getOrganisation,
                    toMap(Status::getProcessedDate, Function.identity())));
}

私が得るjava.lang.IllegalStateException: Duplicate keyように、エラーをgetProcessedDate()リストで異なる値についても同様です。

私はそれを複数のオブジェクトをマージすることができます方法はありprocesseddateマップには?

例えば、私は、リスト内のこれらのオブジェクトを持っていると言います。

Summary(ProcesseDate=2020-01-30, Organisation=ABC, status=OK, statusCount=5)
Summary(ProcesseDate=2020-01-30, Organisation=ABC, status=FAILED, statusCount=2)
Summary(ProcesseDate=2020-01-30, Organisation=APPLE, status=OK, statusCount=5)
Summary(ProcesseDate=2020-01-30, Organisation=APPLE, status=REJECTED, statusCount=5)

マップに含まれる値は次のようになります。

key=ABC
   value { key=2020-01-30, value= Summary(ProcesseDate=2020-01-30, Organisation=ABC, status=OK, statusCount=5), Summary(ProcesseDate=2020-01-30, Organisation=ABC, status=FAILED, statusCount=2) }

私が試したときtoMap(Status::getProcessedDate, Function.identity(), (v1, v2) -> v2)));には、エントリのいずれかを削除します

また:

あなたがデータをマージすると、独自のキーを持っていないしたくない場合は、単に、ネストされたグループを探している可能性があります:

private Map<Organisation, Map<LocalDate, List<Status>>> getSummaries(final List<Status> summaries) {
    return summaries
            .stream()
            .collect(groupingBy(Status::getOrganisation, groupingBy(Status::getProcessedDate)));
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=6326&siteId=1