mem*_*und 2 java java-8 java-stream
我想根据过滤器收集物品.但如果未找到匹配项,则不应初始化结果列表.我更喜欢null而不是空列表.
List<String> match = list
.stream()
.filter(item -> item.getProperty == "match")
.collect(Collectors.toList());
if (match != null && !match.isEmpty()) {
//handle seldom match
}
Run Code Online (Sandbox Code Playgroud)
问题:大多数时候我没有匹配,导致空集合.这意味着即使我不需要,列表也会在大多数情况下实例化.
Collecto.toList()分配一个List使用ArrayList::new,这是一个非常便宜的操作,因为ArrayList在插入元素之前实际上不会分配后备数组.所有构造函数都将内部Object[]字段初始化为静态创建的空数组的值.只有插入第一个元素时,实际的后备阵列才会初始化为"初始大小".
那么为什么要经历避免这种建设的痛苦呢?这听起来像是一个不成熟的优化.
如果您对GC压力如此担心,请不要使用Streams.与列表相比,流和收集器本身的创建成本可能要高得多.
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |