题
这就是我正在做的:我有一个RSS源的事件,告诉我一张票被编辑了。为了得到对那张票所做的更改,我必须打电话给休息服务。
所以我想用更紧凑,功能更强的方法来做到这一点,但它只是变成了一堆疯狂。事实上,直接的旧式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