工作中需要将List转换为String并存储到redis中,进行业务处理时需对redis存储的值进行修改,这里涉及到List和String的相互转换。
为了方便,封装了一个工具类StringUtils,代码如下
/**
* List<String> to String
* @param list
* @return String
*/
public static String list2String(List<String> list){
return String.join(",",list);
}
/**
* String to List<String>
* @param str
* @return List<String>
*/
public static List<String> string2List(String str){
List<String> list= Arrays.asList(str.split(","));
return new ArrayList<>(list);
}
以上转换的字符串是以逗号分隔的,可以根据自己的需要进行修改。
可能出现的问题:
string转换为list后,执行list.add()方法或remove()方法时报以下错误信息:
java.lang.UnsupportedOperationException
原因分析:异常翻译过来就是 请求的方法不被支持。
因为Arrays.asList()转换的类型实际上是java.util.Arrays
A
r
r
a
y
L
i
s
t
,
并
不
是
我
们
经
常
用
到
的
A
r
r
a
y
L
i
s
t
,
A
r
r
a
y
s
ArrayList,并不是我们经常用到的ArrayList,Arrays
ArrayList,并不是我们经常用到的ArrayList,ArraysArrayList和ArrayList都是继承AbstractList,add() 和remove()等方法在AbstractList中默认throw UnsupportedOperationException而不做任何操作。ArrayList重写这些方法对List进行操作,而Arrays$ArrayList却没有重写add()和 remove()等方法,所以对从Arrays.asList()转化过来的List进行add()和remove()会出现UnsupportedOperationException异常。
解决方法:使用 new ArrayList<>(java.util.Arrays$ArrayList) 转换成ArrayList 后再使用add() 和remove()方法。