JavaでのCollectors.toMapメソッドの使い方は何ですか?
JavaのCollectors.toMap()メソッドは、ストリームの要素をMapコレクションに収集するために使用されます。これにはkeyMapperとvalueMapperという2つのパラメータがあり、それぞれがMapのキーと値を生成する方法を指定します。
文法:
public static <T, K, U> Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
パラメーター説明:
- T:要素の流れ方
- K:Mapのキーのタイプを生成
- U: マップの値の型を生成します。
- keyMapper:要素をキーにマッピングする関数
- valueMapper:ストリームの要素を値にマッピングする関数
例えば、Personクラスがあり、nameとageの属性を持っているとします。今、Personのリストがあるとして、そのリストのPersonオブジェクトをnameをキーとして、ageを値として、Mapに変換したいとします。
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> persons = List.of(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 35)
);
Map<String, Integer> map = persons.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge));
System.out.println(map);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
出力結果:
{Alice=25, Bob=30, Charlie=35}
上記の例では、List内のPersonオブジェクトをnameをキー、ageを値としてMapに変換するには、Collectors.toMap(Person::getName, Person::getAge)を使用しました。最終的な出力結果は{Alice=25, Bob=30, Charlie=35}です。