【发布时间】:2021-01-29 19:31:24
【问题描述】:
我有一些代码,其中有两个 API 调用,并将数据存储在列表中。我想比较两个列表并找到匹配和不匹配的数据,如果匹配则将状态设置为“YES”,如果不匹配则将状态设置为“NO”。
如果数据列表少于 1000-1500 个元素,以下是可以完美运行的代码。当列表有超过 2000 条记录时,它需要的时间太长,这会影响应用程序性能,有时我会在服务器上收到超时错误。
下面是我在两个列表之间找到匹配数据并设置状态的代码。
AS400data 包含来自 AS400 的数据,我正在尝试将其与 Oracledata 进行比较,并将 docStatus 设置为“YES”或“NO”
AS400Data.parallelStream()
.forEach(x -> x.setDocStatus(Oracledata.parallelStream()
.filter(o -> o.equals(x))
.findFirst()
.isPresent() ? "Yes" : "No"));
有人可以帮助优化这篇文章吗?提前致谢。
【问题讨论】:
-
.filter(predicate) .findFirst() .isPresent()可以简化为.anyMatch(predicate)。但是当谓词是equals测试时,你根本不应该使用 Stream,Mureinik’s answer 是要走的路。
标签: java list performance java-stream