java - stream() 方法是懒惰的吗?如果是惰性的,那么这个方法本身是否可以像返回流一样被视为中间方法?
问题描述
List<Item> applePhones = list.stream()
.filter((item) -> item.getCompany().equalsIgnoreCase("Apple"))
.filter((item) -> item.getDevice().equalsIgnoreCase("Phone"))
.collect(Collectors.toList());
这里这些过滤器操作是中间的,collect 是终端,那么流调用是什么?
解决方案
简短的回答是stream()
您使用它,它不是一种Stream
方法(它是Collection.stream
)。这意味着流方法/操作的中间与终端或惰性与急切的区别是无关紧要的。
List.stream
在这种情况下代表流的来源。filter
拥有一个流对象,然后您可以在其上调用中间和/或终端操作(collect
在您的示例中)。这是一种避免哲学化的简单方法。
我理解它的方式(可能过于简单化了):
streamObject.operation()
->Stream
:中间/惰性流操作(stream.filter()
,stream.map()
等)streamObject.operation()
-> 其他或无效:终端流操作(stream.collect()
,stream.count()
等)somethingElse.stream()
->Stream
:源(我不认为源是这个流工厂/创建者概念的“名称”,尽管据我所见,这是java.util.stream
包文档list.stream()
所指的) - ( ,Arrays.stream()
,Stream.of()
,optional.stream()
,reader.lines()
等.)
推荐阅读
- swift - 将小时从 12 小时制转换为 24 小时制 Swift 并保存为整数
- ionic3 - 如何在页面更改时隐藏横幅?
- custom-controls - Notes 文档中的 RichText 字段重复
- swift - ARKit – 渲染 1000 米以外的物体
- go - 用于(空间)高效存储的 boltdb 数据格式
- docker - Minishift 安装后不启动
- python - 使用 BeautifulSoup 抓取网站后文本丢失
- javascript - Javascript创建具有唯一值组合的数组
- java - 搜索数组列表不区分大小写
- markdown - 如何使用带有 markdown 的 jekyll 创建侧边菜单