You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:22:02