【发布时间】:2019-11-06 22:30:22
【问题描述】:
我想在 java 中更快地比较两个大小不同的大字符串列表。我想知道有没有更好的方法来提高性能。
我在
中看到了性能问题List<String> list1 = 100k records
List<String> list2 = 10 million records;
#method1 used removeAll
list1.removeAll(list2);
method2 used java8 streams
List<String> unavailable = list1.stream()
.filter(e -> (list2.stream()
.filter(d -> d.equals(e))
.count())<1)
.collect(Collectors.toList());
注意:我正在尝试获取在 list1 中但在 list2 中不存在的记录。
【问题讨论】:
-
“比较”是什么意思?
-
西方世界的大多数人都不知道 10 万意味着 10 万。
-
我相信您的意思是 10 万,其中 100 万 = 100 万。除此之外,流并不比使用
for循环迭代快。还有一点要补充的是,您想通过比较来做什么? -
是的,您的要求还不清楚。你打算达到什么目的。您的方法 1 和方法 2 会产生非常不同的结果。第一个修改 list1,第二个创建一个新列表。那么:你想要达到的具体目标是什么?
-
您似乎正在尝试确保第一个列表中的所有项目都在第二个列表中?在这种情况下,您应该从第二个列表创建一个集合并使用
contains。
标签: java collections java-8 stream java-stream