LoginSignup
0

More than 3 years have passed since last update.

Java の Stream で複数オブジェクトのメソッドが返す文字列を連結する

Last updated at Posted at 2019-08-01

概要

  • List に入っている複数のオブジェクトが返す文字列を連結する
  • Java 8 から導入された java.util.stream.Stream を利用する

ソースコード

MyData.java

/**
 * キー・バリューなデータを表します。
 */
public class MyData {

  private final String k;
  private final String v;

  public MyData(String key, String val){
    this.k = key;
    this.v = val;
  }

  public String key(){
    return k;
  }

  public String val(){
    return v;
  }
}

Main.java

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class Main {

  public static void main(String[] args) {

    // データを構築
    List<MyData> list = new ArrayList<MyData>() {
      {
        add(new MyData("KEY", "VALUE"));
        add(null);
        add(new MyData("キー", "バリュー"));
        add(new MyData("きい", "ばりゅう"));
        add(new MyData("鍵", "値"));
        add(null);
        add(new MyData("key", null));
      }
    };

    // Stream オブジェクトを生成して処理
    String s = list.stream()
      .filter(Objects::nonNull) // 要素が null のものは排除
      .filter(myData -> myData.val() != null) // バリューが null のものは排除
      .sorted(Comparator.comparing(MyData::key).reversed()) // キーで逆順ソート
      .map(myData -> myData.key() + ":" + myData.val()) // 要素ごとに文字列を生成
      .collect(Collectors.joining(", ")); // 文字列を連結

    // 連結した文字列を出力
    System.out.println(s);
  }
}

実行結果

$ javac *.java
$ java Main
鍵:値, キー:バリュー, きい:ばりゅう, KEY:VALUE

動作確認環境

  • OpenJDK 8
  • Debian 9.9 (stretch)

参考資料

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