使用Java 8流的大小为n到数组nx 2的数组

bob*_*sie 1 arrays java-8 java-stream

我试图找出一个简单的转换的最优雅的方式int排列(例如{1, 2, 3}),以一个简单的String阵列(例如,{"id", "1", "id", "2", "id", "3"}使用Java 8流串对).

传统上代码如下: -

int[] input = {1, 2, 3};

String[] output = new String[input.length * 2];

int i = 0;
for (int val : input) {
    output[i++] = "id";
    output[i++] = String.valueOf(val);
}
Run Code Online (Sandbox Code Playgroud)

但假设这可以在Java 8中用1-liner完成.

Eug*_*ene 7

String[] result = Arrays.stream(input)
            .mapToObj(x -> new String[] { "id", "" + x })
            .flatMap(Arrays::stream)
            .toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)

或者可能更冗长(但更糟糕的是,因为我们第一次加入,只是在之后立即拆分)

String[] result = Arrays.stream(input)
            .mapToObj(x -> "id" + "," + x)
            .collect(Collectors.joining(","))
            .split(",");
Run Code Online (Sandbox Code Playgroud)

我可以想到这两个,但是对于你已经拥有的简单的for循环,它几乎不可读.

  • @bobmarksie如果你的输入真的是`int [] input = {1,2,3};`比`mapToObj`而不是`map`.如果你说`map`有效,那就意味着你的输入包含Objects(`Integer`)而不是primitive (2认同)