【问题标题】:Convert an int array to long array using Java 8?使用 Java 8 将 int 数组转换为 long 数组?
【发布时间】:2016-06-17 13:13:21
【问题描述】:

我尝试了几种方法都不成功。

this.tileUpdateTimes 是 long[] 和 other.tileUpdateTimes 是 int[]

this.tileUpdateTimes = Arrays.stream(other.tileUpdateTimes).toArray(size -> new long[size]);
this.tileUpdateTimes = Arrays.stream(other.tileUpdateTimes)
            .map(item -> ((long) item)).toArray();

我该如何解决这个问题?

【问题讨论】:

    标签: java lambda java-8 java-stream


    【解决方案1】:

    您需要使用mapToLong 操作。

    int[] intArray = {1, 2, 3};
    long[] longArray = Arrays.stream(intArray).mapToLong(i -> i).toArray();
    

    或者,正如Holger指出的那样,在这种情况下,您可以直接使用asLongStream():

    int[] intArray = {1, 2, 3};
    long[] longArray = Arrays.stream(intArray).asLongStream().toArray();
    

    原始流上的map 方法返回相同原始类型的流。在这种情况下,IntStream.map 仍将返回 IntStream。

    long 的演员表

    .map(item -> ((long) item))
    

    实际上会使代码无法编译,因为IntStream.map 中使用的映射器预计会返回int 和you need an explicit cast to convert from the new casted long to int。

    使用.mapToLong(i -> i),它期望映射器返回long,int i 值is promoted 自动转换为long,因此您不需要演员表。

    【讨论】:

    • 你将如何从 short[] 到 Int[] 做同样的事情?
    • @EladBenda 流 API 中没有 ShortStream,因此您不会将它用于该任务。不过,您可以使用传统的 for 循环。
    • .mapToLong(i -> i) 步骤已过时,因为可以在本质上处理从 int 到 long 的转换:Arrays.stream(intArray).asLongStream().toArray()...
    • @Holger 我想我从来没有注意到这种方法。谢谢!
    • @JillesvanGurp 不会对mapToLong 进行任何装箱,映射器接受int 并返回long,保持原始类型。阅读代码asLongStream() 只是mapToLong(i -> i) 的简写,但它使它更清晰一些,并且避免了创建 lambda。
    【解决方案2】:

    这个 sn-p 对我来说编译得很好并返回了预期的结果:

        int[] iarr = new int[] { 1, 2, 3, 4, 5, 6 };
        long[] larr = Arrays.stream(iarr)
                            .mapToLong((i) -> (long) i)
                            .toArray();
        System.out.println(Arrays.toString(larr));
    

    【讨论】:

      猜你喜欢
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2012-10-12
      • 1970-01-01
      • 2015-08-23
      • 2011-04-26
      • 2018-05-02
      相关资源
      最近更新 更多