【问题标题】:How can I remove object in one array from another array? [duplicate]如何从另一个数组中删除一个数组中的对象? [复制]
【发布时间】:2016-07-24 15:09:38
【问题描述】:

假设我有这些列表:

List<Integer> numbersA=new ArrayList<Integer>();
List<Integer> numbersB=new ArrayList<Integer>();

“数字 A”是 [1,3,4,7,5,2](没有重复的数字) 而“数字 B”是:[13,32,533,3,4,2]

所以该方法将从“Numbers B”中删除“Numbers A”,而“Numbers B”将是: [13,32,533]

【问题讨论】:

  • 遍历一个arraylist并尝试从另一个中删除项目。
  • 你的例子是错误的,你不能有像int这样的原始类型的List
  • List&lt;int&gt; 不会编译

标签: java arrays


【解决方案1】:

使用方法RemoveAll,这里是doc

示例:

public static void main(String[] args) {
List<Integer> numbersA = new ArrayList<>();
List<Integer> numbersB = new ArrayList<>();
numbersA.addAll(Arrays.asList(new Integer[] { 1, 3, 4, 7, 5, 2 }));
numbersB.addAll(Arrays.asList(new Integer[] { 13, 32, 533, 3, 4, 2 }));
System.out.println("A: " + numbersA);
System.out.println("B: " + numbersB);

numbersB.removeAll(numbersA);
System.out.println("B cleared: " + numbersB);
}

这将打印出来

答:[1, 3, 4, 7, 5, 2]

B:[13、32、533、3、4、2]

B 清除:[13,32,533]

【讨论】:

    【解决方案2】:

    您可以使用 List 的boolean removeAll(Collection&lt;?&gt; c); 方法。它将删除公共元素。

    numbersB.removeAll(numbersA);
    

    【讨论】:

      【解决方案3】:
       Java 8 version
      

      版本 1 改变原始数组

      Integer [] array1 = new Integer[]{1,3,4,7,5,2};
      Integer [] array2 = new Integer[]{13,32,533,3,4,2};
      
      List<Integer> numbersA=Arrays.asList(array1);
      final List<Integer> numbersB=Arrays.asList(array2);
      
      numbersA.stream().forEach(t->numbersB.remove(t));
      

      版本 1 使用过滤器并返回新列表

      Integer [] array1 = new Integer[]{1,3,4,7,5,2};
          Integer [] array2 = new Integer[]{13,32,533,3,4,2};
      
          List<Integer> numbersA=Arrays.asList(array1);
          final List<Integer> numbersB=Arrays.asList(array2);
      
         List<Integer> numbersA.stream().filter(t->numbersB.contains(t)).collect(Collectors.toList());
      

      【讨论】:

      • 我不太喜欢你的回答,首先你不需要从数组中创建一个 List 来获取流,其次你可以在 forEach 中更改状态使用过滤器并收集到另一个数组,我认为它会更清晰/更干净
      猜你喜欢
      • 1970-01-01
      • 2012-07-24
      • 2019-11-23
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多