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)
但这是相反的顺序。
我怎样才能以正确的顺序获得某些东西?显然我可以使用变量,但随后我必须为每个部分结果找到一个名称。
有一个库已经可以完全满足您的需求,即惰性求值,并且操作顺序与其编写方式相同,以及许多其他好东西,例如多进程或多线程 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 中发生的那样。
| 归档时间: |
|
| 查看次数: |
10550 次 |
| 最近记录: |