実務でStreamAPIを使う機会があったので復習。
StreamAPI意図的に使うようにしていかないと忘れちゃうよね。
やりたいこと
List<Address>みたいなデータベースから取得した住所情報みたいなListがあったとしよう。
このList内のAddressクラスが持っているフィールドのidだけのListを新たに作りたい。
実装
以下がAddressクラス。
メインはStreamAPIの検証なのでシンプルにゲッター、セッター、コンストラクタのみの構成です。
public class Address {
//フィールドは適当
private String id;
private String street;
private String city;
/**
* コンストラクタ
* @param id
* @param street
* @param city
*/
Address(String id, String street, String city){
this.id = id;
this.street = street;
this.city = city;
}
/**
* @return id
*/
public String getId() {
return id;
}
/**
* @param id セットする id
*/
public void setId(String id) {
this.id = id;
}
/**
* @return street
*/
public String getStreet() {
return street;
}
/**
* @param street セットする street
*/
public void setStreet(String street) {
this.street = street;
}
/**
* @return city
*/
public String getCity() {
return city;
}
/**
* @param city セットする city
*/
public void setCity(String city) {
this.city = city;
}
}
次がメインクラス。
実際の処理を書いていきます。
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
//Adress型のList作成
List<Address> addresses = List.of(
new Address("1", "123 Main St", "Tokyo"),
new Address("2", "456 Side St", "Osaka"),
new Address("3", "789 High St", "Nagoya")
);
//Adress型のListからAdressのIDを取り出して新たなListを作る
List<String> ids = addresses.stream() //stream()呼び出してStream<Address>を作成する
.map(Address::getId) //Address.getIdで取り出した値で
.collect(Collectors.toList()); //新しくListを作る
//結果表示
ids.forEach(System.out::println);
}
}
この書き方でできました。
StreamAPIって便利だけどとっつきにくいというか慣れるまで時間がかかる・・・。
調べずにスラスラ書けるようになったらかっこいいからみんなも使おう。
コメント