複数のストリームでの操作
-
20-12-2019 - |
質問
ここに私がやっていることがあります:私はチケットが編集されたことを私に言っている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());
所属していません StackOverflow