Javaでリストを文字列に変換する

1前書き

このクイック記事では、要素の List String に変換する方法について説明します。これは、検査やデバッグのためにコンテンツを人間が読める形式でコンソールに出力するなどの特定のシナリオでは有用な場合があります。

2 List の標準 toString()

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

@Test
public void whenListToString__thenPrintDefault() {
    List<Integer> intLIst = Arrays.asList(1, 2, 3);

    System.out.println(intLIst);
}

出力:

----[1, 2, 3]----

このテクニックは、 List 内の要素の型の toString() メソッドを内部的に利用します。今回のケースでは、 toString()メソッドを適切に実装した Integer__タイプを使用しています。

私たちがカスタム型、例えば Person を使用している場合、 Person クラスが toString() メソッドをオーバーライドし、デフォルトの実装に依存しないことを確認する必要があります。 toString() メソッドが正しく実装されていないと、予期しない結果が生じる可能性があります。

----[[email protected],
 [email protected],
 [email protected]]----

3 Collectors を使用したカスタム実装

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

前の例と比較して、コンマ(、)をハイフン( - )と角括弧([、])を中括弧(\ {、})で置き換えます。

@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 が必要なので、 Integer String にマップする必要があります。他のクラスの場合でも、そのクラスのコードにアクセスできない場合でも、同じ考え方を利用できます。

4外部ライブラリを使用する

これで、Apache Commonsの StringUtils クラスを使用して同様の結果を得ることができます。

4.1. Mavenの依存関係

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

依存関係の最新バージョンはhttps://search.maven.org/classic/#search%7C1%7Cg%3A%22org.apache.commons%22%20AND%20a%3A%22commons-lang3% 22[ここ]

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結論

この記事では、さまざまな手法を使用して List String に変換することがいかに簡単かを説明しました。

いつものように、この記事の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/java-collections-conversions[GitHubに載っています]。

前の投稿:Javaにおける一般化されたターゲット型推論
次の投稿:Java Web Weekly、第132号