我可以在不执行两个单独的流并且不在 HashMap 中临时存储 id 和状态的情况下执行此操作吗?
SaveStatus saveStatus = saveService.save(input);
Map<Long, SaveStatus> savedStatuses = new HashMap<>();
saveStatus.getSaveStatusResults()
.stream()
.forEach(s -> savedStatuses.put(s.getId(), s.getSavedStatus()));
objectToUpdateWithNewStatuses.getSaveInstructions()
.stream()
.map(SaveInstruction::getTransaction)
.forEach(t -> t.setSaveStatus(savedStatuses.get(t.getId())));
最佳答案
这里使用两个不同的流是有意义的!
第二个流不将从第一个流收集的 map 作为输入/源,它需要它来执行快速检索。
但是您可以通过这种方式改进第一个流:
Map<Long, SaveStatus> savedStatuses =
saveStatus.getSaveStatusResults()
.stream()
.collect(toMap(SaveStatusResult::getId, SaveStatusResult::getSavedStatus));
所使用的方法引用假设 SaveStatus.getSaveStatusResults()
返回 SaveStatusResult
的 Collection
。
并保留第二个流的定义。
关于java - 具有两个流的 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52180913/