问题描述
String s = "aaa";
List<String> list = Splitter.on(":").splitToList(s);
list.add("bbb");
使用Splitter.on(":").splitToList(s)
返回的list不能进行add操作,否则会抛java.lang.UnsupportedOperationException
异常
问题原因
查看源码可以看出使用Splitter.on(":").splitToList(s)
返回的list是不可变集合
public List<String> splitToList(CharSequence sequence) {
Preconditions.checkNotNull(sequence);
Iterator<String> iterator = this.splittingIterator(sequence);
ArrayList result = new ArrayList();
while(iterator.hasNext()) {
result.add(iterator.next());
}
return Collections.unmodifiableList(result);
}
问题解决
//Guava解决
String s = "aaa";
List<String> list = Lists.newArrayList(Splitter.on(":").splitToList(s).iterator());
list.add("bbb");
//JDK解决
String s = "aaa";
List<String> list = new ArrayList<>(Splitter.on(":").splitToList(s));
list.add("bbb");