你好,我正在尝试通过检查其他列表来删除列表中的项目。它看起来像这样,
List<Model> list1 = Arrays.asList(new Model("pink",4),new Model("red",3))
List<Model> list2 = Arrays.asList(new Model("pink",4),new Model("pink",3),new Model("violet",9))
我想从list2中删除这两个粉色项,因为list1中包含相同的内容,因此我不能使用equals,因为我只使用颜色进行比较。
如何用一种好的方式,也许使用流?
最终结果应如下所示:
[Model("violet",9)]
2条答案
按热度按时间7ajki6be1#
简单地说,您的问题的答案是:不可能-您不能从通过调用
Arrays.asList
(你可以.set
,但不能添加、删除或以任何其他方式更改大小;它只是一个围绕数组的轻量级 Package 器,数组的大小在java中是固定的)。假设有2个arraylist示例,可能是用new ArrayList<>(Arrays.asList(...))
,然后你可以移除东西。您选择的数据结构效率低下。“最好的”方法,如果受“我有两个列表”的限制,就是。。。一步一个脚印:
通过使用list,速度应该是~o(n),而不是o(n^2)。除非你在这些列表中有成千上万的东西,否则这并不重要,但以防万一,这不会表现得很差。
93ze6v8z2#
如果
list2
是可变的,您可以简单地使用removeIf
```list2.removeIf(model->list1.stream().anyMatch(m->m.getColor().equals(model.getColor())));
List result = list2.stream()
.filter(model->list1.stream()
.noneMatch(m->m.getColor().equals(m.getColor())))
.collect(Collectors.toList());