无法从java中的主列表中删除项目列表

时间:2018-04-06 10:41:33

标签: java list exception arraylist

public static void main(String[] args) {
    String OptionId = "111, 112, 113, 114, 115";

    List<String> fullList = Arrays.asList(OptionId.split(","));
    List<String> values = new ArrayList<String>();

    System.out.println("fullList: " + fullList.toString());

    List<String> subItems = fullList.subList(0, 3);

    System.out.println("subItems: " + subItems);

    for (String s : fullList) {
        String strs[] = new String[2];

        if (subItems.contains(s) 
               || subItems.contains(strs[0]) 
               || subItems.contains(strs[1])) {
            values.add(s);                      // save the value to a list
        }
    }
    System.out.println("values: " + values);

    fullList.remove(values);

    System.out.println("fullList: " + fullList);

}

据我所知,最终的完整列表应该只有[114,115]。但它没有删除子列表中的项目。

我也尝试过以下代码。     fullList.removeAll(值);

但它会引发以下错误。

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractCollection.removeAll(AbstractCollection.java:376)
at com.tesco.rangeplan.client.Test.main(Test.java:32)

我需要输出如下:

fullList: [114,  115]

2 个答案:

答案 0 :(得分:0)

Arrays.asList()返回由指定数组支持的固定大小列表 因此,大小固定,您无法添加或删除元素 将其包装到ArrayList以防止此限制:

List<String> fullList = new ArrayList<>(Arrays.asList(OptionId.split(",")));

作为替代方案,您也可以这样做:

List<String> fullList = Arrays.stream(OptionId.split(",")).collect(Collectors.toList());

请注意,您使用as remove(Object)作为参数调用List<String>。 它将删除任何内容,因为此方法允许删除传递给的元素,实际上List List中不包含String。而不是使用接受集合作为参数的removeAll(Collection<?>)

答案 1 :(得分:0)

您的具体错误UnsupportedOperationException是因为您使用Arrays.asList返回固定大小的列表。您无法添加/删除它。这就是它抛出异常的原因。

创建ArrayList并将项目添加到其中。顺便说一句

String strs[] = new String[2];并且您的关注等于检查将始终导致错误,因为其中没有任何内容。此外,如果您按,分割,则还应该trim(),否则您的当前示例会有空格。