List遍历删除

97 阅读1分钟

方法一:

public static void main(String[] args) {
       List<String> list = new ArrayList<>();
       list.add("a");
       list.add("ab");
       list.add("abc");
       list.add("ad");
       Iterator<String> iterator = list.iterator();
       while(iterator.hasNext()){
           String next = iterator.next();
           if("a".equals(next)||"c".equals(next)){
               iterator.remove();
           }
       }
       System.out.println(JSONObject.toJSONString(list));
   }
输出:

1
["ab","abc","ad"]

方法二

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("ab");
        list.add("abc");
        list.add("ad");
      	list.removeIf(s->"a".equals(s)||"c".equals(s));
        System.out.println(JSONObject.toJSONString(list));
    }
异常操作

List<String> list = Arrays.asList("a", "b", "abcd");
list.removeIf(s -> "a".equals(s) || "c".equals(s));
System.out.println(JSONObject.toJSONString(list));
Exception in thread "main" java.lang.UnsupportedOperationException
        原因
@SafeVarargs
@SuppressWarnings("varargs")
public static <T > List < T > asList(T...a){
    return new ArrayList<>(a);
}

/**
 * @serial include
 */
private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable {

}

AbstractList做任何操作都是异常
public void add ( int index, E element){
    throw new UnsupportedOperationException();
}

/**
 * {@inheritDoc}
 *
 * <p>This implementation always throws an
 * {@code UnsupportedOperationException}.
 *
 * @throws UnsupportedOperationException {@inheritDoc}
 * @throws IndexOutOfBoundsException     {@inheritDoc}
 */
public E remove ( int index){
    throw new UnsupportedOperationException();
}
修改
      String [] str={"a","b","c","abcd"};
      List<String> strs = Arrays.asList(str);
      List<String> list = new ArrayList<>();
      list.addAll(strs);
      list.removeIf(s->"a".equals(s)||"c".equals(s));
      System.out.println(JSONObject.toJSONString(list));