代码对比
✕ Pre-Streams
List<String> list = getNames();
String[] arr = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
arr[i] = list.get(i);
}
✓ 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[]。
相关文档