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)

パラメーター説明:

  1. T:要素の流れ方
  2. K:Mapのキーのタイプを生成
  3. U: マップの値の型を生成します。
  4. keyMapper:要素をキーにマッピングする関数
  5. 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}です。

bannerAds