LoginSignup
0
2

More than 5 years have passed since last update.

Stream APIでStringの配列をオブジェクトの配列に変換する方法

Last updated at Posted at 2018-12-06

実装したいことのイメージ

変換前:

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初心者だから、無理やり使って早く慣れるようにしたい。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2