代码之家  ›  专栏  ›  技术社区  ›  user9130953

如何从ArrayList中删除唯一元素

  •  0
  • user9130953  · 技术社区  · 6 年前

    我有两个列表,一个列表中的值是1,2,3

    另一个列表2,3

    我想删除两个列表中不匹配的值。

    2和3在两个列表中都是匹配的,那么1在两个列表中都没有被加工,所以我想删除这个值。

    List original = [1,2,3];
    
    List dummy = [2,3];
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   davidxxx    6 年前

    你不需要使用 Set 达到你的要求。
    使用 retainAll() 定义于 Collection 任何 List 实施工具,如:

    List<Integer> original = new ArrayList<>(Arrays.asList(1,2,3));
    List<Integer> dummy = Arrays.asList(2,3);
    
    original.retainAll(dummy);
    System.out.println(original);
    

    输出:

    〔2, 3〕

        2
  •  3
  •   Mark    6 年前

    如果可以用集合代替,那么就可以得到集合之间的交集。( info ):

    Set<String> s1;
    Set<String> s2;
    s1.retainAll(s2); // s1 now contains only elements in both sets
    

    当然,使用集合时,不能有重复项,而且会丢失排序。

        3
  •  0
  •   Youcef LAIDANI    6 年前

    如果您使用的是Java 8 +,您可以使用:

    original.removeIf(a -> !dummy.contains(a));
    

    下面是一个Java 10的例子

    var original = new ArrayList<>(List.of(1, 2, 3, 4));
    var dummy = new ArrayList<>(List.of(2, 4, 3));
    
    original.removeIf(a -> !dummy.contains(a));
    
    System.out.println(original);
    ->[2, 3, 4]