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())));