如何仅从重复项列表中删除一项?

时间:2018-07-29 15:50:32

标签: java android list arraylist

我有一个列表:(x, y, y,z)

我还有另一个列表:(x, y)

您要从第一列表中删除也属于第二列表的项目。

例如:我希望结果为(y,z)

我该怎么做?

编辑: :如果我使用removeAll。示例列表返回(z)

3 个答案:

答案 0 :(得分:1)

您可以通过多种方式执行此操作。这是一些例子。

List<String> one = new ArrayList<String>();
    one.add("x");
    one.add("y");
    one.add("y");
    one.add("z");
List<String> two = new ArrayList<String>();
    two.add("x");
    two.add("y");

1。使用Lambda

two.forEach((i)->one.remove(i));
System.out.println(one);

输出:[y,z]

2。 Apache Commons

Collection<Integer> result = CollectionUtils.subtract(one, two);
System.out.println(one);

输出:[y,z]

答案 1 :(得分:1)

此解决方案似乎可以接受。

set prompt=$$

输出:

  

一个:[y,z]


List.remove(Object o)文档:

  

从列表中删除第一次出现的指定元素(如果存在)(可选操作)。如果此列表不包含该元素,则它保持不变。更正式地讲,删除索引i最低的元素,使得(o == null?get(i)== null:o.equals(get(i)))(如果存在这样的元素)。如果此列表包含指定的元素(或等效,如果此列表由于调用而更改),则返回true。


注意:算法的复杂度为List<String> one = new ArrayList<>(); one.add("x"); one.add("y"); one.add("y"); one.add("z"); List<String> two = new ArrayList<>(); two.add("x"); two.add("y"); for (String s : two) { one.remove(s); } System.out.println("one : " + one); ,请避免使用2个非常大的列表(其中O(n*m)n是列表大小)来实现。 / p>

答案 2 :(得分:0)

检查以下内容:

    ArrayList<String> list1 = new ArrayList<String>();
    list1.add("Maria");
    list1.add("Nick");
    list1.add("Nick");
    list1.add("Joe");

    ArrayList<String> list2 = new ArrayList<String>();
    list2.add("Maria");
    list2.add("Nick");

    for (String x : list2) {
        int index = list1.indexOf(x);
        if (index >= 0) {
            list1.remove(index);
        }
    }