문제

내가 하고 있는 일은 다음과 같습니다.티켓이 편집되었음을 알려주는 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