【发布时间】:2020-11-14 09:09:30
【问题描述】:
我想为具有非 null 属性的元素过滤列表并返回该属性:
list.stream.map(a -> StringUtils.trimToEmpty(a.getProp())).filter( p -> StringUtils.isNotEmpty(p)).findAny().orElse("");
上面的代码是否首先映射所有元素?出于效率原因,我想逐个元素地处理。
【问题讨论】:
-
不行,map操作偷懒,在pipeline中一一进行
-
所以它起作用了:如果 prop 不为空,它将停止到第一个映射?
-
是的,请参阅@Nikolas 回答中的详细信息
-
与其他更传统的方法相比,这实际上是流式传输的核心原则和优势之一。大多数操作都是“懒惰的”,只建立一个操作管道。一旦您进行了终端操作,元素就会通过管道一个一个地发送,而不是之前。
标签: java java-8 java-stream short-circuiting