java - 从另一个对象列表中删除重复的列表对象值
问题描述
我有两个对象列表,它们的名称在两个列表中都重复。我需要从 list2 中删除 list1 中的所有重复值。
下面是场景,类有 name 变量,这个变量需要检查 list1 中的重复值并需要删除。
Class ObjectClass{
String name;
}
//这是第一个列表有3个对象
List<ObjectClass> list1= new ArrayList();
ObjectClass objectClassDataL1= new ObjectClass();
objectClassDataL1.setName("test");
list1.add(objectClassDataL1);
ObjectClass objectClassDataL2= new ObjectClass();
objectClassDataL2.setName("test2");
list1.add(objectClassDataL2);
ObjectClass objectClassDataL3= new ObjectClass();
objectClassDataL3.setName("test3");
list1.add(objectClassDataL3);
List<ObjectClass> list2= new ArrayList();
ObjectClass objectClassData1= new ObjectClass();
objectClassData1.setName("test");
list2.add(objectClassData1);
ObjectClass objectClassData2= new ObjectClass();
objectClassData2.setName("test3");
list2.add(objectClassData2);
我需要删除 list1 中的对象,其name
值与 list2 中的值相同。
例如这里从 list1 中删除数据后,list1 应该只包含一个对象数据。预期输出:
list1 --> [对象('test2')]
list1 大小为 1
请在 Java 8 中使用流向我推荐。
解决方案
请在带有流的 JAVA 8 中建议我,
在这里,您不想使用流,因为您想修改现有的list1
.
您可以做的是list2
在 a 中添加元素的名称Set
并从中删除list1
不包含在的元素Set
:
Set<String> namesInList2 = list2.stream().map(ObjectClass::getName).collect(toSet());
list1.removeIf(o -> namesInList2.contains(o.getName());
它分两步完成,但足够清晰和高效。
推荐阅读
- c++11 - 如何在 C++ 中对多个变量使用测试相同的条件
- or-tools - Google Ortools - 路由示例的问题
- swift - 使用 xcode 和 swift 向您的应用程序添加年龄限制的最佳方法是什么
- algorithm - 朴素贝叶斯分类器:数据集样本数问题
- php - 如何从价格背面删除 ,00 或 .00?
- javascript - 每次单击按钮时如何创建带有圆圈的画布
- python - Numpy相等的dtype
- asp.net - 附加类型为“X”的实体失败,因为同一类型的另一个实体已经具有相同的主键值。错误
- vue.js - 让 Chartkick 在渲染图表之前等待从 Firebase 填充数据
- tensorflow - 实现 tensorflow 高级 api 时出错