【问题标题】:How a save in a list the elements of a first list that are not contained in a second list with duplicate values?如何将不包含在第二个列表中且具有重复值的第一个列表的元素保存在列表中?
【发布时间】:2019-05-31 06:01:49
【问题描述】:

我对虚拟图的启发式算法有问题,我必须从两个整数列表中计算数字的元素:我必须将第一个的数字和不在其中的数字放入一个列表中第二个列表。

我尝试了两个 addAll 和一个 removeAll(secondList) 并且它可以工作,但是当列表有 duplicates 它不起作用,因为也删除了重复的元素:

        //Test lists
        List<Integer> ls1 = Arrays.asList(1,1,2,3);
        List<Integer> ls3 = Arrays.asList(1,3);
        List<Integer> s = new ArrayList<>();

        s.addAll(ls1);
        System.out.println("Add " + ls1);
        s.addAll(ls3);
        System.out.println("Add " + ls3);
        System.out.println("New list" + s);
        s.removeAll(ls3);
        System.out.println("Expected value (1,2)");
        System.out.println("Result List " + s);

新列表为 [1, 1, 2, 3, 1, 3],预期输出为 [1,2] 但实际输出仅为 2。

【问题讨论】:

  • 为什么不迭代列表 ls1 并仅在没有以前的实例时才将元素添加到新列表中?
  • 看看List#retainAllSet 是什么

标签: java list java-8 java-7


【解决方案1】:

ls2 中的元素从ls1 中移除为:

List<Integer> ls1 = Arrays.asList(1, 1, 2, 3);
List<Integer> ls2 = Arrays.asList(1, 3);
List<Integer> s = new ArrayList<>(ls1);
ls2.forEach(s::remove);

【讨论】:

    【解决方案2】:

    嗨@Guillermo Garrido,

    您似乎想从列表一中减去列表二。

    如果你在你的项目中使用apache-commons,那么你可以简单地通过以下行来做到这一点:

    import import org.apache.commons.collections.ListUtils;
    List<Integer> s = ListUtils.subtract(ls1, ls2);
    

    或者,如果您想使用简单的 java 来完成,请查看 @Naman 的答案。

    【讨论】:

      猜你喜欢
      • 2019-12-21
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      相关资源
      最近更新 更多