将 String 数组转换为 StringBuilder 数组

Convert String array to StringBuilder array

除了使用循环之外,是否有任何快速将 String 数组转换为 StringBuilder 数组的方法?
假设我有这个字符串数组:

String[] str = new String[] {"hi","hello"};

我需要创建一个 StringBuilder 具有相同文字的数组。

Arrays.setAll()好像是最简单的,可能比循环更短:

    String[] str = new String[] {"hi","hello"};
    StringBuilder[] sbs = new StringBuilder[str.length];
    Arrays.setAll(sbs, i -> new StringBuilder(str[i]));

甚至还有 parallelSetAll(),但我认为对于简单地创建对象来说,它必须是一个非常长的数组才能从并行性中获益。

你不会相信里面的样子:

public static <T> void setAll(T[] array, IntFunction<? extends T> generator) {
    Objects.requireNonNull(generator);
    for (int i = 0; i < array.length; i++)
        array[i] = generator.apply(i);
}

(平行的用IntStream.range().parallel().forEach())


原回答
在制作这些线的过程中没有循环受到伤害:

String[] str = new String[] {"hi","hello"};
StringBuilder[] sbs=Arrays.stream(str)
                          .map(s->new StringBuilder(s))
                          //.collect(Collectors.toList()) // not needed, see comments
                                                          // of @RealSkeptic and @Holger
                          .toArray(StringBuilder[]::new);

当然可以,不用写单循环语句也可以。 现在在后台将有两个循环,一个用于将 StringBuilder 创建为 List,另一个用于将其转换为数组。而且我仍然不会说它特别漂亮或者,特别是考虑到最后也会有一堆类似的线条,对于另一个方向。


如果修改是独立的,并且末端必须保留数组,我确实会使用单个 "classic" 索引 for 循环,在主体中执行所有操作:

String[] str = new String[] {"hi","hello"};
for(int i = 0; i < str.length; i++) {
  StringBuilder sb = new StringBuilder(str[i]);
  ...magic...
  str[i] = sb.toString(); // or perhaps into a new array
}