こんにちは、さるまりんです。
今回は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());
出力するとこう↓になります。
[バッハ, ベートーヴェン, ブラームス, モーツァルト, ショパン, ワーグナー, チャイコフスキー, マーラー, ドビュッシー, ショスタコーヴィチ, ストラヴィンスキー]
こんなことしたいケース結構あるように思います。
数行のコードでできるの便利ですね。
読んでくださってありがとうございました。
それではまた!