在python中以java.util.stream的方式处理序列

Adr*_*n H 6 python python-3.x java-stream

有人知道我如何在Python中以java流API的方式编写序列处理吗?这个想法是按照操作发生的顺序编写操作:

myList.stream()
    .filter(condition)
    .map(action1)
    .map(action2)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

现在在 python 中我可以做

[action2(action1(item)) for item in my_list if condition(item)]
Run Code Online (Sandbox Code Playgroud)

但这是相反的顺序。

我怎样才能以正确的顺序获得某些东西?显然我可以使用变量,但随后我必须为每个部分结果找到一个名称。

asu*_*asu 8

有一个库已经可以完全满足您的需求,即惰性求值,并且操作顺序与其编写方式相同,以及许多其他好东西,例如多进程或多线程 Map/Reduce。它被命名为pyxtension,它已准备好生产,由单元测试覆盖并在PyPi上维护,并且它是根据 MIT 许可证发布的 - 因此您可以在任何商业项目中免费使用它。您的代码将被重写为以下形式:

from pyxtension.streams import stream

stream(myList)
    .filter(condition)
    .map(action1)
    .map(action2)
    .toList()
Run Code Online (Sandbox Code Playgroud)

stream(myList)
    .filter(condition)
    .mpmap(action1)   # this is for multi-processing map
    .fastmap(action2) # this is multi-threaded map
    .toList()
Run Code Online (Sandbox Code Playgroud)

请注意,最后一条语句toList()完全符合您的预期 - 它收集数据,就像 Spark RDD 中发生的那样。

  • 感谢@miwe对许可证的观察,它已更改为MIT许可证,所以现在它可以在任何情况下使用。 (4认同)