2016-06-17 5 views
4

私はいくつかの方法をうまく試してみました。Java 8を使用してint配列をlong配列に変換しますか?

this.tileUpdateTimeslong[]あると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(); 

のですか?

答えて

14

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を返します。

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

long

キャストが実際にIntStream.mapで使用マッパーがintyou need an explicit cast to convert from the new casted long to intを返すことが期待されているので、コードがコンパイルされないようになります。

longを返すマッパーを期待 .mapToLong(i -> i)

int i値に自動的longからis promotedので、あなたは、キャストは必要ありません。

+1

あなたが短いから同じことをするでしょうか[]を? –

+0

@EladBendaストリームAPIには 'ShortStream'がありませんので、そのタスクには使用しません。あなたは伝統的なforループを使用することができます。 – Tunaki

+5

'.mapToLong(i - > i)'のステップは、 'int'から' long'への変換が本質的に扱えるので時代遅れです: 'Arrays.stream(intArray).asLongStream()。toArray()' ... – Holger

3

このコードは私のために罰金コンパイルし、期待どおりの結果を返します:[] intに

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)); 
関連する問題