一、Set与String互转
在处理JSON数据时,我发现想把数据取出来用set去重,然后toString后放回JSON,但是再取出来要转成Set时就出问题了。
这是一个用例:
JSONObject jsonObject = new JSONObject();
jsonObject.put("姓名", "张三,李四");
HashSet<Object> names = Sets.newHashSet(jsonObject.getString("姓名").split(","));
names.add("王五");
jsonObject.put("姓名", names);
这时候json中姓名的字段变成了
[李四, 张三, 王五]
如果用同样的方法取出来并放入Set中:
HashSet<String> names = Sets.newHashSet(StringUtils.strip(jsonObject.getString("姓名", "[]")).split(","));
names.add("王五");
System.out.println(names);
这时候打印出来的Set是:
[李四, 张三, 王五, 王五]
因为Set转String的时候会给字段前面加上空格,如果再给每个元素去空格,会觉得额外繁琐。
可以使用这种方法:
JSONObject jsonObject = new JSONObject();
jsonObject.put("姓名", "张三,李四");
HashSet<Object> names = Sets.newHashSet(jsonObject.getString("姓名").split(","));
names.add("王五");
jsonObject.put("姓名", StringUtils.join(names, ","));
names = Sets.newHashSet(jsonObject.getString("姓名").split(","));
names.add("王五");
System.out.println(names);
结果是:
[李四, 张三, 王五]
在插入json的时候不要直接转String插入,而是使用StringUtils.join,这样不会出现多余的空格和前后括号。
二、 String转list
String转list的时候很容易出现一个问题:
String listString = "张三,李四";
List<String> list = Arrays.asList(listString.split(","));
list.add("王五");
提示报错:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
这是因为asList方法转出来的List为Arrays内部类ArrayList,而不是java.util.ArrayList,所以需要对list进一步转换操作
String listString = "张三,李四";
List<String> list = Arrays.asList(listString.split(","));
List<String> arrayList = new ArrayList<>(list);
arrayList.add("王五");