我有这样的代码:

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


当前回答

问题是您正在使用数组. 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);
    }
}

其他回答

创建一个新列表并在新列表中填充有效值对我来说很有用。

代码抛出错误-

List<String> list = new ArrayList<>();
   for (String s: list) {
     if(s is null or blank) {
        list.remove(s);
     }
   }
desiredObject.setValue(list);

修复后-

 List<String> list = new ArrayList<>();
 List<String> newList= new ArrayList<>();
 for (String s: list) {
   if(s is null or blank) {
      continue;
   }
   newList.add(s);
 }
 desiredObject.setValue(newList);

只需阅读JavaDoc中的asList方法:

返回对象的{@code List} 在指定数组中。的大小 {@code List}不能被修改, 即添加和删除是 不支持,但元素可以支持 集。元素的设置将修改 底层数组。

这是来自Java 6,但它看起来是一样的android Java。

EDIT

结果列表的类型是Arrays。数组列表,它是数组。class中的私有类。实际上,它只是你通过Arrays.asList传递的数组的List-view。结果是:如果你改变了数组,列表也会改变。由于数组不能重新调整大小,因此删除和添加操作必须不受支持。

Arrays.asList()返回的列表可能是不可变的。你能试试吗?

List<String> list = new ArrayList<>(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);
    }
}

Arraylist narraylist = arrays . aslist ();//返回不可变数组列表 使其可变的解决方案将是: Arraylist naraylist =new Arraylist (Arrays.asList());