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に載っています]。