java - 具有两个流的 Lambda

标签 java lambda java-stream

我可以在不执行两个单独的流并且不在 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() 返回 SaveStatusResultCollection

并保留第二个流的定义。

关于java - 具有两个流的 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52180913/

相关文章:

java - java中html的xsl转换

java - 为什么 GC 时间在长时间运行的高容量 Java 应用程序上稳步增加?

Java 根据算术结果舍入 int 值

ruby - 你如何字符串化/序列化 Ruby 代码?

lambda - Java 8 从输入构建 IntStream 的最佳方式

java - 在 Java 8 Stream 中设置一个 boolean 标志

java - 从 setOnItemClickListener 访问主类成员变量

c# - 递归搜索分层列表

java - Java中为什么存在匿名类?

java - "String[]::new"是什么意思?