想知道,如何使用java 1.8流转换两个嵌套的FOR循环。 场景: 变量usrAccountId - 由User发送 variable accountDetailsinRedis-实际上帐户存在于数据库中。 我实际上比较用户发送的accountId与数据库中的accountId相同。 这是在代码下面,我有两个嵌套的FOR循环,我想使用Stream将其转换为Java 1.8。任何人都有任何想法。
for (int usrAccountId : acctIDstoValidate) {
for (Account account : accountDetailsinRedis) {
答案 0 :(得分:1)
根据您的实际逻辑,您可以传递多个id
来匹配
所以你可以有多个匹配。
在acctIDstoValidate
上流式传输,然后使用flatMap()
上的accountDetailsinRedis
对其进行链接,以对id
进行过滤。
Collection<Integer> acctIDstoValidate = ...;
Collection<Account> accountDetailsinRedis = ...;
List<Account> matching = acctIDstoValidate.stream()
.flatMap(idToValidate-> accountDetailsinRedis.stream()
.filter(b-> b.getId() == idToValidate))
.collect(Collectors.toList());
答案 1 :(得分:0)
你能详细介绍一下你在循环中做什么吗? 对我来说,我不知道你在这做什么,因此我建议你可以这样使用:
acctIDstoValidate.forEach(item -> {
accountDetailsinRedis.forEach({
//TODO
})
});
有点像下面的代码片段
答案 2 :(得分:0)
使用猜测工具,假设您的示例中的两个变量都是集合,这可能就是您所追求的:
acctIDstoValidate.removeAll( accountDetailsinRedis.stream() .MAP(帐户::的getId) .collect(Collectors.toList()) )
你最终会留下enlid id:acctIDstoValidate
另请注意,您的变量命名方法可以改进,以便始终使用帐户而不是有时将其缩短为acct,而不是为了获得更好的驼峰套管而使用ID:accountIdsToValidate