一覧<人>地図に<文字列、リスト<ダブル>>代わりに地図の<文字列、リスト<人>>変換する方法?

Nipun:

考慮するPersonクラスは、三つのフィールド名(文字列)、年齢(int型)、給与(ダブル)を持っています。

私は、(代わりに給料としてキーと値として名前を持つマップを作成したいPersonキーが一意でない場合、すべての重複キーの値を保持するためのLinkedListを使用して、オブジェクト自体)。

私は、下記のリンクで与えられた解決策を参照しています:慣用的には、Java 8でのストリームから複数値マップの作成 値として給与を持つハッシュマップを作成する方法が、まだ不明

私が作成できるmap<String, List<Double>>のforEach()で。コードは以下のとおりであります:

List<Person> persons= new ArrayList<>();
        persons.add(p1);
        persons.add(p2);
        persons.add(p3);
        persons.add(p4);

        Map<String, List<Double>> personsByName = new HashMap<>();

        persons.forEach(person ->
            personsByName.computeIfAbsent(person.getName(), key -> new LinkedList<>())
                    .add(person.getSalary())
        );

私はマップを作成するには、「groupingBy&コレクト」を使用しようとしています。私たちが望む場合はPerson、それ自体がオブジェクトの値として、コードは以下の通りであります:

Map<String, List<Person>> personsByNameGroupingBy = persons.stream()
                .collect(Collectors.groupingBy(Person::getName, Collectors.toList()));

しかし、私は、下記のような値として給与とのマップを作成します:

Map<String, List<Double>> 

このシナリオを実現するには?

彼らは次のとおりでした:

あなたは使用することができますCollectors.mappingマップするためにPerson、対応する給与にインスタンスを:

Map<String, List<Double>> salariesByNameGroupingBy = 
    persons.stream()
           .collect(Collectors.groupingBy(Person::getName, 
                                          Collectors.mapping(Person::getSalary,
                                                             Collectors.toList())));

おすすめ

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