Javaでとあるクラスのリストからその中のとあるフィールドのリストを取得する方法

こんにちは、さるまりんです。

今回はJavaでとあるクラスのとあるフィールドのリストの取得の仕方です。

例で見てみます。
以前も使ったこんなクラスがあります。

/**
 * 作曲家
 */
public class Composer {
    /** 名前 */
    private String name;
    /** 生年 */
    private int yearOfBirth;
    /** 没年 */
    private int yearOfDeath;

    /** constructor */
    public Composer(String name, int yearOfBirth, int yearOfDeath) {
        this.name = name;
        this.yearOfBirth = yearOfBirth;
        this.yearOfDeath = yearOfDeath;
    }

    /* getters */
    public String getName() {
        return name;
    }

    public int getYearOfBirth() {
        return yearOfBirth;
    }

    public int getYearOfDeath() {
        return yearOfDeath;
    }

    public String toString() {
        return "[" + name + ":" + yearOfBirth + "-" + yearOfDeath + "]";
    }
}

このクラスのリストを作り

List<Composer> composers = new ArrayList<Composer>();
composers.add(new Composer("バッハ", 1685, 1750));
composers.add(new Composer("ベートーヴェン", 1770, 1827));
composers.add(new Composer("ブラームス", 1833, 1897));
composers.add(new Composer("モーツァルト", 1756, 1791));
composers.add(new Composer("ショパン", 1810, 1849));
composers.add(new Composer("ワーグナー", 1813, 1883));
composers.add(new Composer("チャイコフスキー", 1840, 1904));
composers.add(new Composer("マーラー", 1860, 1918));
composers.add(new Composer("ドビュッシー", 1862, 1918));
composers.add(new Composer("ショスタコーヴィチ", 1906, 1975));
composers.add(new Composer("ストラヴィンスキー", 1882, 1971));

このクラスのnameフィールドのみのリストを取得したい時は次のようなコードで実現できます。

List<String> names =
        composers.stream()
                 .map(Composer::getName)
                 .collect(Collectors.toList());

出力するとこう↓になります。

[バッハ, ベートーヴェン, ブラームス, モーツァルト, ショパン, ワーグナー, チャイコフスキー, マーラー, ドビュッシー, ショスタコーヴィチ, ストラヴィンスキー]

こんなことしたいケース結構あるように思います。
数行のコードでできるの便利ですね。

読んでくださってありがとうございました。

それではまた!