質問

ここに私がやっていることがあります:私はチケットが編集されたことを私に言っている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