当サイトは、アフィリエイト広告を利用しています

【java8】ArrayListをカンマ区切文字列に変換する

作成日:2022月08月24日
更新日:2023年12月14日

javaのArrayListを指定した区切り文字で文字列に変換する方法を
まとめる。
方法としては下記がある

  • streamAPIのjoininngを使う
  • joinメソッドを使う

配列を区切り文字列に変換する方法については下記記事でまとめています。

また当ブログで紹介しているjava8のstreamAPIを使った
コレクションや配列の操作方法を
下記記事でメソッド別にまとめています!

streamAPIを使用するパターン

Collectorsクラスのjoiningメソッドを使って文字列に変換できる

文字列のListの場合

Main.java
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.*;
public class Main {
public static void main(String[] args) throws Exception {
// 文字列List作成
List<String>strList = Arrays.asList("ta","ti","tu");
// 文字列に変換
String joined = strList.stream().collect(Collectors.joining(":"));
System.out.println(joined);
}
}

オブジェクトのListの場合

オブジェクトのListを文字列にする場合はオブジェクトの元のクラスで
toStringメソッドをオーバーライドする必要がある。

Person.java
public class Person {
private final int id;
private final String name;
private final String address;
private final int age;
Person(int id,String name, String address,int age) {
this.id = id;
this.name = name;
this.address = address;
this.age = age;
}
public int getId() {
return this.id;
}
public String getName() {
return this.name;
}
public String getAddress() {
return this.address;
}
public int getAge() {
return this.age;
}
@Override
public String toString()
{
return "{" + this.id + " " + this.name + " " + this.address + this.age +"}";
}
}

mapとjoiningを使って文字列にする

Main.java
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.*;
public class Main {
public static void main(String[] args) throws Exception {
// Listを生成
List<Person>list = new ArrayList<>();
for(int i=0;i<3;i++){
Person pobj = new Person(i,"Name"+i,"東京"+i,i+10);
list.add(pobj);
}
// オブジェクトのカンマ区切り文字列にする
String result = list.stream().map(v->v.toString()).collect(Collectors.joining(","));
System.out.println(result);
}
}
// {0 Name0 東京010},{1 Name1 東京111},{2 Name2 東京212}

オブジェクトリストを文字列にするケースはなかなかないと思うが。。。
オブジェクトリストの場合はJSON文字列にすることが多いので 

動作確認

paiza.ioで上記二つの動作確認をする

【java8】ArrayList→文字列(オブジェクト)

joinメソッドを使用するパターン

String.joinメソッド使ってもstreamと同じようにできる

Main.java
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.*;
public class Main {
public static void main(String[] args) throws Exception {
// 文字列List作成
List<String>strList = Arrays.asList("ta","ti","tu");
// 文字列に変換
String joined = String.join(":",strList);;
System.out.println(joined);
}
}
//結果
//ta:ti:tu

動作確認

javaでListの文字列変換(joining)

区切り文字列からArrayListに戻す

一度、区切り文字列を配列に変換してから、それをさらにlistに変換する

Main.java
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.*;
public class Main {
public static void main(String[] args) throws Exception {
// 文字列List作成
List<String>strList = Arrays.asList("ta","ti","tu");
// 文字列に変換
String joined = String.join(",",strList);;
System.out.println(joined);
// listに戻す
List<String>paramList = Arrays.asList(joined.split(","));
System.out.println(paramList);
}
}
// ta,ti,tu
// [ta, ti, tu]
  • split()で配列に変換する
  • Arrays.asListでlistに変換する

オブジェクトリストの場合はできなかった。
オブジェクトリストの場合は文字列ではなくJSON文字列に変換したほうが
扱いやすいのでそっちを使ったほうがいいと思う。

区切文字列がエスケープ文字の場合

区切文字列がエスケープ文字の場合はエスケースシーケンスがいる

Main.java
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.*;
public class Main {
public static void main(String[] args) throws Exception {
// エスケープ文字の場合
// 文字列List作成
List<String>esStrList = Arrays.asList("ta","ti","tu");
// 文字列に変換
String joinedes = String.join("|",esStrList);;
System.out.println(joinedes);
// listに戻す(エスケープする)
List<String>esList = Arrays.asList(joinedes.split("\\|"));
System.out.println(esList);
}
}
// ta|ti|tu
// [ta, ti, tu]

動作確認

上記二つを動作確認する

【java】区切り文字列をListに戻す

まとめ

最近は値を文字列で扱わずともfrontからbackendに来た時に
フレームワーク(Spring)とかで変換されていることが多いが
レガシィなシステムを触ると以外と文字列変換と戻しを
使うことが多いのでまとめておく。

参考書籍

javaの技術書としては下記が参考になりました。
java8のSteramAPIについても詳しく書かれているのでおススメです!

新着記事

タグ別一覧
top