Лямбда с двумя потоками - PullRequest
       11

Лямбда с двумя потоками

0 голосов
/ 05 сентября 2018

Могу ли я сделать это без двух отдельных потоков и без временного сохранения идентификаторов и статусов в 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 голосов
/ 05 сентября 2018

Использование двух разных потоков имеет смысл здесь!

Второй поток не принимает в качестве входных / исходных данных карту, собранную из первого потока, для этого требуется быстрый поиск.

Но вы могли бы улучшить первый поток следующим образом:

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

Используемые ссылки на метод предполагают, что SaveStatus.getSaveStatusResults() возвращает Collection из SaveStatusResult.

И оставьте второй поток таким, как он определен.

...