Python Java forEach等价

mfuanj7w  于 2023-06-07  发布在  Python
关注(0)|答案(3)|浏览(146)

我是Java程序员。几天前我开始学习Python。我在想:是否有任何等价物

map.forEach(System.out::println)

Python中的lambdas?或者只使用for循环:

for e in map: print(e)
hivapdat

hivapdat1#

没有与Java的命令式Iterable.forEachStream.forEach方法等效的方法。有一个map函数,类似于Java的Stream.map,但它用于将转换应用于可迭代对象。像Java的Stream.map一样,它实际上并不应用函数,直到您对返回值执行终结符操作。
您可以滥用map来完成forEach的工作:

list(map(print, iterable))

但这是一个坏主意,从一个不应该有任何副作用的函数中产生副作用,并建立一个你不需要的巨大列表。就像是

someList.stream().map(x -> {System.out.println(x); return x;}).collect(Collectors.toList())

在Java中。
在Python中实现这一点的标准方法是一个循环:

for thing in iterable:
    print(thing)
uurity8g

uurity8g2#

Python还有一个map函数,它使用的语法是map(function, iterable, ...)
参见Python文档:https://docs.python.org/2/library/functions.html#map

bpzcxfmw

bpzcxfmw3#

没有内置的流,但您可以使用PyStreamAPI。它支持并行和顺序流,延迟执行所有操作,此外还提供NumericStreams
下面是一个示例,演示了PyStreamAPI的工作原理:

from pystreamapi import Stream

Stream.of([" ", '3', None, "2", 1, ""]) \
    .filter(lambda x: x is not None) \
    .map(str) \
    .map(lambda x: x.strip()) \
    .filter(lambda x: len(x) > 0) \
    .map(int) \
    .sorted() \
    .for_each(print) # Output: 1 2 3

此外,PyStreamAPI支持简化处理逻辑的条件:

from pystreamapi import Stream
from pystreamapi.conditions import odd, less_than, prime

Stream.of(range(10))\
    .filter(odd())\
    .take_while(less_than(6))\
    .any_match(prime()) # True

希望这有帮助!

相关问题