使用Java 8将int数组转换为长数组?

Ela*_*nda 7 java lambda java-8 java-stream

我尝试了几种不成功的方法.

this.tileUpdateTimeslong[]other.tileUpdateTimesint[]

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

我怎样才能解决这个问题?

Tun*_*aki 21

您需要使用该mapToLong操作.

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

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

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

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

演员要long

.map(item -> ((long) item))
Run Code Online (Sandbox Code Playgroud)

实际上会使代码不能编译,因为IntStream.map预期的mapper 会返回一个int,你需要一个显式的强制转换来从新的转换longint.

随着.mapToLong(i -> i),这需要一个映射器返回longint i被提升long自动,所以你并不需要强制转换.

  • `.mapToLong(i - > i)`步骤已经过时,因为从`int`到`long`的转换可以内在处理:`Arrays.stream(intArray).asLongStream().toArray()`... (5认同)
  • @JillesvanGurp没有任何装有`mapToLong`的拳击,mapper接受一个`int`并返回一个`long`,保留原始类型.读取代码`asLongStream()`只是`mapToLong(i - > i)`的简写,但它使它更清晰,避免创建lambda. (2认同)