如何用Lambda或Stream以现代Java方式修改数组元素(无需集合转换)
问题
现有一段传统Java代码,通过for循环为String数组的每个元素追加"_abc"后调用bar方法。尝试用Stream的map操作实现时,需要把数组转Stream、再转List后转回数组,相比旧代码过于繁琐,想知道有没有无需这类集合转换的实现方式。
原代码示例
void foo(String[] ary) { for (int i = 0; i < ary.length; i++) { ary[i] += "_abc"; } bar(ary); // whatever }
尝试的Stream实现
ary = (String[]) Arrays.stream(ary).map(a -> a + "_abc").collect(Collectors.toList()).toArray();
解决方案
完全不需要经过List转换,Stream API提供了直接生成指定类型数组的toArray重载方法,你可以直接传入数组构造方法引用,一步完成转换:
ary = Arrays.stream(ary).map(a -> a + "_abc").toArray(String[]::new);
说明
toArray(String[]::new)会直接根据Stream中元素的数量创建对应长度的String数组,然后将处理后的元素填充进去,省去了转List的中间步骤,代码更简洁高效。- 这种方式不需要手动做类型强转,避免了原代码中
(String[])强制转换的潜在风险。
内容的提问来源于stack exchange,提问作者chris01
相关产品推荐
相关产品推荐

