【问题标题】:Concatenating two int[]连接两个 int[]
【发布时间】:2019-02-25 10:34:01
【问题描述】:

通过Streams 在java 中连接两个String[]Integer[] 有一些简单的解决方案。由于经常使用int[]。有什么直接的方法可以连接两个int[]

这是我的想法:

int[] c = {1, 34};
int[] d = {3, 1, 5};
Integer[] cc = IntStream.of(c).boxed().toArray(Integer[]::new);
Integer[] dd = Arrays.stream(d).boxed().toArray(Integer[]::new);
int[] m = Stream.concat(Stream.of(cc), Stream.of(dd)).mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(m));

>>
[1, 34, 3, 1, 5]

它有效,但它实际上将int[] 转换为Integer[],然后再次将Integer[] 转换回int[]

【问题讨论】:

标签: java arrays lambda java-8 java-stream


【解决方案1】:

您可以将IntStream.concatArrays.stream 一起使用,无需任何自动装箱或拆箱即可完成此操作。这是它的外观。

int[] result = IntStream.concat(Arrays.stream(c), Arrays.stream(d)).toArray();

请注意,Arrays.stream(c) 返回一个 IntStream,然后将其与另一个 IntStream 连接起来,然后收集到一个数组中。

这是输出。

[1, 34, 3, 1, 5]

【讨论】:

    【解决方案2】:

    您可以使用IntStream.concat 简单地连接原始(int)流:

    int[] m = IntStream.concat(IntStream.of(c), IntStream.of(d)).toArray();
    

    【讨论】:

    • 在我看来只是读起来更好,但值得注意的是,引擎盖下的 IntStream.of 使用了 Arrays.stream 本身。
    【解决方案3】:

    使用 for 循环,避免使用 toArray()。

    int[] e = new int[c.length+d.length];
    int eIndex = 0;
    for (int index = 0; index < c.length; index++){
        e[eIndex] = c[index];
        eIndex++;
    }
    for (int index = 0; index < d.length; index++){
        e[eIndex] = d[index];
        eIndex++;
    }
    

    【讨论】:

    • 不需要手动实现这样的循环。只需使用 int[] e = Arrays.copyOf(c, c.length+d.length); System.arraycopy(d, 0, e, c.length, d.length); 即可。
    猜你喜欢
    • 2017-03-14
    • 1970-01-01
    • 2023-04-09
    • 2019-06-07
    • 1970-01-01
    • 2012-09-29
    • 2016-11-18
    • 2012-11-20
    • 2016-12-09
    相关资源
    最近更新 更多