我有两个清单。
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 2));
List<Integer> list2 = new ArrayList<>(Arrays.asList(2, 3, 4));
我想删除其中包含的元素list2
from list1
,恰好与它们包含在中的次数一样多list2
。在上面的例子中:当我们删除列表 1 中存在于列表 2 中的元素时,我们应该得到结果[1, 2]
(仅出现一次2
应该从list1
因为list2
仅包含一个实例2
).
我尝试过list1.removeAll(list2);
但我得到的结果列表仅包含[1]
.
实现这一目标的最佳方法是什么?同时迭代两个列表对我来说似乎有点难看。
如果我理解正确的话,你只想删除一个2
元素来自list1
而不是全部。你可以迭代一遍list2
并尝试从中删除每个元素list1
。请记住,如果有比这更有效的方法list2
不能包含重复项。
var list1 = new ArrayList<>(List.of(1, 2, 2));
var list2 = List.of(2, 3, 4);
list2.forEach(list1::remove);
list1
现在包含以下内容:
[1, 2]
See starman1979 的回答 https://stackoverflow.com/a/49411110/7294647对于相同的解决方案,但使用 lambda 而不是方法引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)