我尝试了几种不成功的方法。
1
为this.tileUpdateTimes
,long[]
为other.tileUpdateTimes
int[]
我该如何解决这个问题?
答案 0 :(得分:19)
您需要使用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
,因此您不需要演员。
答案 1 :(得分:3)
此代码段对我编译很好并返回预期结果:
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));