多个流的操作

时间:2014-07-28 17:21:42

标签: java lambda java-8 java-stream

这就是我正在做的事情:我有一个来自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;
}

这里有几个与此相关的问题似乎没有直截了当的答案,我问这个问题是有一个非常具体的例子,问题非常明确:是否可以用流和如果是这样的话?

如果溪流不适合这样的事情,那么它们真的不是很好。我之所以这样说是一个非常普遍的要求:某些数据可以从其他来源获得更多信息。

1 个答案:

答案 0 :(得分:4)

您需要的是flatMap,它可以将输入列表的单个ProcessEvent对象映射到多个ProcessEventChange对象,并将所有这些对象展平为单个ProcessEventChange流。< / p>

List<ProcessEventChange> recentChanges = getLatestEvents().
         stream().
         flatMap(e -> getChanges(e).stream()).
         collect(Collectors.toList());