1. ホーム

[解決済み】ストリームを使用して、オブジェクトのリストをtoStringメソッドから取得した文字列に変換する

2022-04-17 12:06:01

質問

Java 8には、便利な新機能がたくさんあります。例えば、オブジェクトのリストをストリームで反復処理し、その中の特定のフィールドから値を合計することができます。 Object のインスタンスです。例えば

public class AClass {
  private int value;
  public int getValue() { return value; }
}

Integer sum = list.stream().mapToInt(AClass::getValue).sum();

従って、私は String の出力を連結したものです。 toString() メソッドをインスタンスから1行にまとめたものです。

List<Integer> list = ...

String concatenated = list.stream().... //concatenate here with toString() method from java.lang.Integer class

仮に list は整数を含む 1 , 23 と予想しています。 concatenated"123" または "1,2,3" .

解決方法は?

簡単な方法としては、リスト項目を StringBuilder

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);

StringBuilder b = new StringBuilder();
list.forEach(b::append);

System.out.println(b);

も試してみてください。

String s = list.stream().map(e -> e.toString()).reduce("", String::concat);

説明:mapは整数ストリームを文字列ストリームに変換し、すべての要素の連結として縮小されます。

注:これは normal reduction で実行され、O(n) 2 )

を使用すると、より良いパフォーマンスが得られます。 StringBuilder または mutable reduction F. Böllerの答えと同じようなものです。

String s = list.stream().map(Object::toString).collect(Collectors.joining(","));

参考 ストリーム削減