带两个流的Lambda

时间:2018-09-05 08:47:29

标签: java lambda java-stream

是否可以在不执行两个单独的流且不将ID和状态临时存储在HashMap中的情况下执行此操作?

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())));

1 个答案:

答案 0 :(得分:2)

在这里使用两个不同的流很有意义!

第二个流不将从第一个流中收集的地图作为输入/源,它需要执行快速检索。

但是您可以通过以下方式改进第一流:

Map<Long, SaveStatus> savedStatuses = 
saveStatus.getSaveStatusResults()
    .stream()
    .collect(toMap(SaveStatusResult::getId, SaveStatusResult::getSavedStatus));

所使用的方法引用假设SaveStatus.getSaveStatusResults()返回Collection中的SaveStatusResult

并按定义保留第二个流。