我有这样的代码:
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
取代
List<String> list=Arrays.asList(split);
to
List<String> list = New ArrayList<>();
list.addAll(Arrays.asList(split));
or
List<String> list = new ArrayList<>(Arrays.asList(split));
or
List<String> list = new ArrayList<String>(Arrays.asList(split));
或(更适合删除元素)
List<String> list = new LinkedList<>(Arrays.asList(split));
问题是您正在使用数组. aslist()方法创建一个具有固定长度的列表
这意味着
由于返回的List是一个固定大小的List,所以不能添加/删除元素。
请看下面我正在使用的代码块
由于它是由asList()创建的迭代列表,因此不可能删除和添加,它是一个固定数组
List<String> words = Arrays.asList("pen", "pencil", "sky", "blue", "sky", "dog");
for (String word : words) {
if ("sky".equals(word)) {
words.remove(word);
}
}
这将很好地工作,因为我们正在获取一个新的数组列表,我们可以在迭代时进行修改
List<String> words1 = new ArrayList<String>(Arrays.asList("pen", "pencil", "sky", "blue", "sky", "dog"));
for (String word : words) {
if ("sky".equals(word)) {
words.remove(word);
}
}