gpt4 book ai didi

java - 如何在java 8流api中延迟初始化Collectors.toList()?

转载 作者:行者123 更新时间:2023-11-30 06:03:40 25 4
gpt4 key购买 nike

我想根据过滤器收集项目。但如果未找到匹配项,则不应初始化结果列表。我更喜欢 null 而不是空列表。

List<String> match = list
.stream()
.filter(item -> item.getProperty == "match")
.collect(Collectors.toList());

if (match != null && !match.isEmpty()) {
//handle seldom match
}

问题:大多数时候我没有匹配,导致集合为空。这意味着大多数时候列表都会被实例化,即使我不需要它。

最佳答案

Collecto.toList() 使用 ArrayList::new 分配一个 List,这是一个非常便宜的操作因为 ArrayList 在插入元素之前实际上并不分配后备数组。构造函数所做的就是将内部 Object[] 字段初始化为静态创建空数组的值。仅当插入第一个元素时,实际的后备数组才会初始化为其“初始大小”。

那么为什么要经历避免这种构造的痛苦呢?这听起来像是一个过早的优化。

如果你非常担心 GC 压力,就不要使用 Streams。流和收集器本身的创建可能比列表“昂贵”得多。

关于java - 如何在java 8流api中延迟初始化Collectors.toList()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51705408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com