这就是我正在做的事情:我有一个来自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;
}
这里有几个与此相关的问题似乎没有直截了当的答案,我问这个问题是有一个非常具体的例子,问题非常明确:是否可以用流和如果是这样的话?
如果溪流不适合这样的事情,那么它们真的不是很好。我之所以这样说是一个非常普遍的要求:某些数据可以从其他来源获得更多信息。
答案 0 :(得分:4)
您需要的是flatMap,它可以将输入列表的单个ProcessEvent
对象映射到多个ProcessEventChange
对象,并将所有这些对象展平为单个ProcessEventChange
流。< / p>
List<ProcessEventChange> recentChanges = getLatestEvents().
stream().
flatMap(e -> getChanges(e).stream()).
collect(Collectors.toList());