1. 序章

このクイックチュートリアルでは、要素のリスト文字列に変換する方法を説明します。 これは、検査/デバッグのために人間が読める形式でコンテンツをコンソールに印刷するなど、特定のシナリオで役立ちます。

2. リストの標準toString()

最も簡単な方法の1つは、 ListtoString()メソッドを呼び出すことです。

@Test
public void whenListToString_thenPrintDefault() {
    List<Integer> intLIst = Arrays.asList(1, 2, 3);
 
    System.out.println(intLIst);
}

出力:

[1, 2, 3]

この手法は、 List内の要素のタイプのtoString()メソッドを内部的に利用します。 この例では、 Integer タイプを使用しています。これには、 toString()メソッドが適切に実装されています。

Person などのカスタムタイプを使用している場合は、 PersonクラスがtoString()メソッドをオーバーライドし、オーバーライドしないことを確認する必要があります。 tデフォルトの実装に依存します。 toString()メソッドを適切に実装しないと、予期しない結果が生じる可能性があります。

[org.baeldung.java.lists.ListToSTring$Person@1edf1c96,
  org.baeldung.java.lists.ListToSTring$Person@368102c8,
  org.baeldung.java.lists.ListToSTring$Person@6996db8]

3. コレクターを使用したカスタム実装

多くの場合、出力を別の形式で表示する必要があります。

前の例と比較して、コンマ(、)をハイフン(-)に置き換え、角かっこ([、])を中括弧({、})のセットに置き換えましょう。

@Test
public void whenCollectorsJoining_thenPrintCustom() {
    List<Integer> intList = Arrays.asList(1, 2, 3);
    String result = intList.stream()
      .map(n -> String.valueOf(n))
      .collect(Collectors.joining("-", "{", "}"));
 
    System.out.println(result);
}

出力:

{1-2-3}

Collectors.joining()メソッドには CharSequence が必要なので、 map IntegerStringにマッピングする必要があります。 。 クラスのコードにアクセスできない場合でも、他のクラスでこれと同じアイデアを利用できます。

4. 外部ライブラリの使用

次に、ApacheCommonsのStringUtils クラスを使用して、同様の結果を達成します。

4.1. Mavenの依存関係

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>

依存関係の最新バージョンはここにあります。

4.2. 実装

実装は文字通り単一のメソッド呼び出しです。

@Test
public void whenStringUtilsJoin_thenPrintCustom() {
    List<Integer> intList = Arrays.asList(1, 2, 3);
 
    System.out.println(StringUtils.join(intList, "|"));
}

出力:

1|2|3

繰り返しますが、この実装は、検討しているタイプの toString()実装に内部的に依存しています。

5. 結論

この記事では、さまざまな手法を使用してリスト文字列に変換するのがいかに簡単かを学びました。

いつものように、この記事の完全なソースコードは、GitHubにあります。