我有一个列表:(x, y, y,z)
我还有另一个列表:(x, y)
您要从第一列表中删除也属于第二列表的项目。
例如:我希望结果为(y,z)
我该怎么做?
编辑: :如果我使用removeAll。示例列表返回(z)
答案 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]
从列表中删除第一次出现的指定元素(如果存在)(可选操作)。如果此列表不包含该元素,则它保持不变。更正式地讲,删除索引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);
}
}