Вопрос

Вот что я делаю:У меня есть событие из RSS-канала, которое сообщает мне, что билет был отредактирован.Чтобы получить изменения, внесенные в этот билет, мне нужно вызвать службу REST.

Поэтому я хотел сделать это более компактным и функциональным подходом, но это превратилось в какое-то безумие.Хотя на самом деле старый стиль Java очень прост:

/**
 * Since the primary interest is in what has been changed, we focus on getting changes
 * often and pushing them into the appropriate channels.
 *
 * @return changes made since we last checked
 */
public List<ProcessEventChange> getLatestChanges(){
    List<ProcessEventChange> recentChanges = new ArrayList<>();
    List<ProcessEvent> latestEvents = getLatestEvents();
    for (ProcessEvent event : latestEvents){
        recentChanges.addAll(getChanges(event));
    }
    return recentChanges;
}

Здесь было несколько вопросов, связанных с этим, на которые, похоже, не было однозначных ответов. Я задаю этот вопрос, чтобы был очень конкретный пример, и вопрос был кристально ясен:это работа по переработке этого с помощью потоков, и если да, то как?

Если потоки не подходят для подобных вещей, они действительно не годятся для многих вещей.Причина, по которой я это говорю, заключается в том, что это очень распространенное требование:что некоторая часть данных может быть дополнена дополнительной информацией из другого источника.

Это было полезно?

Решение

Что вам нужно, так это FlatMap, который может отображать один ProcessEvent объект входного списка для нескольких ProcessEventChange объекты и свести все эти объекты в один поток ProcessEventChange.

List<ProcessEventChange> recentChanges = getLatestEvents().
         stream().
         flatMap(e -> getChanges(e).stream()).
         collect(Collectors.toList());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top