【问题标题】:Operations on Multiple Streams多流操作
【发布时间】:2014-07-28 17:21:42
【问题描述】:

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

这里有几个与此相关的问题似乎没有直接的答案,我问这个问题是为了有一个非常具体的例子,问题很清楚:它是否可以使用流和如果有怎么办?

如果流不适合这样的事情,那么它们真的没什么用。我这么说的原因是这是一个非常普遍的要求:用来自另一个来源的更多信息来丰富一些数据。

【问题讨论】:

    标签: java lambda java-8 java-stream


    【解决方案1】:

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

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

    【讨论】:

    • 我查看了 flatMap,但在 getChanges(e) 的末尾没有 .stream() 调用。会试试的。
    • 不错。文档怎么可能没有这样做的例子?也许我错过了,会再看一遍。同时,测试通过。谢谢伊兰。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多