这就是我正在做的:我有一个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());
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top