代码对比
✕ Pre-Streams
List<String> list = getNames();
List<String> filtered = new ArrayList<>();
for (String n : list) {
if (n.length() > 3) {
filtered.add(n);
}
}
String[] arr = filtered.toArray(new String[0]);
✓ Java 8+
String[] arr = getNames().stream()
.filter(n -> n.length() > 3)
.toArray(String[]::new);
发现此代码有问题? 告诉我们。
为什么现代方式更好
类型安全
没有 Object[] 转换——数组类型是正确的。
简洁
方法引用语法简洁而具有表达力。
无 System.arraycopy
不需要中间 Object[] 和数组复制。
旧方式
手动过滤 + 复制
现代方式
toArray(generator)
自 JDK
8
难度
入门
JDK 支持
类型化流 toArray
可用
自 JDK 8 起广泛可用(2014 年 3 月)
工作原理
toArray(IntFunction) 方法从流创建正确类型化的数组。传递 String[]::new 获取 String[],而非 Object[]。
相关文档
证明