実装したいことのイメージ
変換前:
String[] strArray = {"りんご", "みかん", "バナナ"};
変換後:
Fruit ringo = new Fruit("りんご");
Fruit mikan = new Fruit("みかん");
Fruit banana = new Fruit("バナナ");
Fruit[] fruitArray = {ringo, mikan, banana};
※FruitはフィールドにString nameを持つ任意のクラスで、コンストラクタにてnameを設定するものと仮定。
環境
OS:Windows 10
Java:Oracle JDK 11
(開発・テスト等の用途においては、無償で利用できると解釈しています)
(参考)普通のfor文の場合
String[] strArray = {"りんご", "みかん", "バナナ"};
Fruit[] fruitArray = new Fruit[strArray.length];
for(int i = 0; i < strArray.length; i++) {
fruitArray[i] = new Fruit(strArray[i]);
}
StreamAPIを使用する場合
Fruit[] fruitArray = Arrays.stream(strArray) // (1)
.map(Fruit::new) // (2)
.toArray(Fruit[]::new); // (3)
軽く説明
(1) String配列からStringストリームへ変換。(String[]⇒Stream<String>)
(2) mapメソッドでStreamの要素それぞれに対して、Fruitクラスを生成。
コンストラクタの引数はString name1つのみなので、この記述でOK。
(もちろん、ラムダ式 s -> new Fruit(s) でもOK。)
(3) toArrayメソッドで配列へ変換。
まとめ
慣れない内はfor文の方が分かりやすいし、書きやすいけど、
慣れるとStreamAPIを使った方がコードが短くなるし、楽に書ける。
自分もまだまだStream初心者だから、無理やり使って早く慣れるようにしたい。