有一个需求,因为涉及到了二个集合比较,二个集合都是 28-30 万数据,后续可能一个集合的数据会增加。 使用下面的方式去过滤,竟然 2 个小时都没返回,因此我想使用 removeAll 的方式。但是无法重写 equals 啊。想知道有没有特殊的写法。有大佬知道还有啥子效率高的写法么...
if (ArrayUtil.isEmpty(list2) || ArrayUtil.isEmpty(list1)) {
return list1;
}
List<Map> copyList = new ArrayList<>(list1);
//可能会有重复数据
Iterator<Map> it = copyList.iterator();
while (it.hasNext()) {
boolean flag = false;
Map map = it.next();
for (Map sendMap : list2) {
if (PartTool.getString(map, key, null).equals(PartTool.getString(sendMap, key, null))) {
flag = true;
break;
}
}
/** false , true
* 1.拿要插入的跟查出来的做比较 如果相同则从集合中剔除
* true,false
* 2.拿查询出来的根要插入的做比较 删掉一样的数据
*/
if (isDeleted && flag){
//如果不存在则剔除
it.remove();
}else if (!isDeleted && flag) {
//如果相同则不增加
it.remove();
}
/*if (flag) {
it.remove();
}*/
}
return copyList;
现在改成了这样
List<Map> reduceList = list1.stream().parallel().filter(item -> {
for (Map b : list2) {
return !b.get("INTERCEPT_ACCOUNT").equals(item.get("INTERCEPT_ACCOUNT"));
}
return true;
}).collect(toList());
return reduceList;
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.