我有以下代码:
public static String SelectRandomFromTemplate(String template,int count) {
String[] split = template.split("|");
List<String> list=Arrays.asList(split);
Random r = new Random();
while( list.size() > count ) {
list.remove(r.nextInt(list.size()));
}
return StringUtils.join(list, ", ");
}
我得到这个:
06-03 15:05:29.614: ERROR/AndroidRuntime(7737): java.lang.UnsupportedOperationException
06-03 15:05:29.614: ERROR/AndroidRuntime(7737): at java.util.AbstractList.remove(AbstractList.java:645)
这怎么会是正确的方法? Java 15
#1楼
您不能删除,也不能添加到固定大小的数组列表中。
但是您可以从该列表创建子列表。
list = list.subList(0, list.size() - (list.size() - count));
public static String SelectRandomFromTemplate(String template, int count) {
String[] split = template.split("\\|");
List<String> list = Arrays.asList(split);
Random r = new Random();
while( list.size() > count ) {
list = list.subList(0, list.size() - (list.size() - count));
}
return StringUtils.join(list, ", ");
}
*其他方式是
ArrayList<String> al = new ArrayList<String>(Arrays.asList(template));
这将创建不固定大小的ArrayList,例如Arrays.asList
#2楼
我认为替换为:
List<String> list = Arrays.asList(split);
与
List<String> list = new ArrayList<String>(Arrays.asList(split));
解决了问题。
#3楼
是的,在Arrays.asList
,返回一个固定大小的列表。
除了使用链接列表之外,只需使用addAll
方法列表。
例:
String idList = "123,222,333,444";
List<String> parentRecepeIdList = new ArrayList<String>();
parentRecepeIdList.addAll(Arrays.asList(idList.split(",")));
parentRecepeIdList.add("555");
#4楼
对于该问题,我还有另一种解决方案:
List<String> list = Arrays.asList(split);
List<String> newList = new ArrayList<>(list);
在newList
工作;)
#5楼
可能是因为您使用的是不可修改的包装器 。
更改此行:
List<String> list = Arrays.asList(split);
到这行:
List<String> list = new LinkedList<>(Arrays.asList(split));
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3161649