Javaでリストを文字列に変換する
1. 前書き
この簡単な記事では、要素のListをStringに変換する方法を見ていきます。 これは、検査/デバッグのために人間が読める形式でコンテンツをコンソールに印刷するような特定のシナリオで役立つ場合があります。
2. Listの標準toString()
最も簡単な方法の1つは、ListでtoString()メソッドを呼び出すことです。
@Test
public void whenListToString_thenPrintDefault() {
List 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 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にmapする必要があります。 他のクラスの場合でも、そのクラスのコードにアクセスできない場合でも、同じ考え方を利用できます。
4. 外部ライブラリの使用
同様の結果を達成するためのApacheCommonsのStringUtilsクラスの使用法を見ていきます。
4.2. 実装
実装は文字通り単一のメソッド呼び出しです:
@Test
public void whenStringUtilsJoin_thenPrintCustom() {
List intList = Arrays.asList(1, 2, 3);
System.out.println(StringUtils.join(intList, "|"));
}
出力:
1|2|3
繰り返しますが、この実装は、検討しているタイプのtoString()実装に内部的に依存しています。
5. 結論
この記事では、さまざまな手法を使用してListをStringに変換するのがいかに簡単であるかを見ました。
いつものように、この記事の完全なソースコードはover on GitHubにあります。