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

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

предоставить SaveStatus, SaveStatusResult, SaveInstruction , а также

Andrew Tobilko 05.09.2018 10:52

Я думаю, это просто прекрасная логика: savedStatuses как функция сопоставления от id до SaveStatus. Не начинайте с objectToUpdateWithNewStatuses, используя группировку по идентификатору, {идентификатор, набор транзакции), а затем передавайте его в getSaveStatusResults для setSaveStatus. ИМХО это уродливее. Идеально было бы, если бы getSaveStatusResults дал эту карту.

Joop Eggen 05.09.2018 10:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Но вы можете улучшить первый поток таким образом:

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

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

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

Другие вопросы по теме