转换数组以包含每个项目的副本

时间:2017-05-05 13:52:44

标签: java arrays

我在一个字符串数组中有名字:

["foo", "bar", "baz"]

我想将其转换为:

["foo", "foo", "bar", "bar", "baz", "baz"]

我目前的解决方案:

String[] ns = new String[2 * names.length];
int i = 0;
for (String name : names)
{
    ns[i++] = name;
    ns[i++] = name;
}

有更清洁的解决方案吗?特别是,我认为重复的任务很难完成。

2 个答案:

答案 0 :(得分:4)

假设您使用的是Java 8+,您可以将Stream - flatMap每个元素用于两个元素流,然后在转换回数组之前收集到List。像,

String[] names = { "foo", "bar", "baz" };
String[] ns = Stream.of(names).flatMap(s -> Stream.of(s, s))
        .collect(Collectors.toList()).toArray(new String[] {});

答案 1 :(得分:2)

有点清洁,或许:

String[] ns = new String[2 * names.length];
for (int i = 0; i < ns.length; i++)
    ns[i] = names[i / 2];