2017-11-05 7 views
2

ため未定義であるIはLinkedList<Byte>のバイト配列を変換しようとしています:のJava 8つのストリーム:この方法は、箱入り()種ストリーム<Byte>

//data is of type byte[] 
List<Byte> list = Arrays.stream(toObjects(data)).boxed().collect(Collectors.toList()); 

Byte[] toObjects(byte[] bytesPrim) { 
    Byte[] bytes = new Byte[bytesPrim.length]; 
    Arrays.setAll(bytes, n -> bytesPrim[n]); 

    return bytes; 
} 

最初の行は、というエラーメッセージを発生させ

タイプStream<Byte>の場合、boxed()メソッドは未定義です。

このエラーメッセージが表示される理由と、この問題を回避する方法を教えてください。

+3

ボックス化されたオブジェクトのストリームをボックス化することはできません。 =) –

+0

@LouisWasserman私はboxed()メソッドの呼び出しを追い出すべきですか? – ecdhe

+0

それでは、どうしたらいいですか?あなたは*それが電話していると期待していますか?あなたの配列型は 'byte []'ではなく 'Byte []'であることに注意してください。 –

答えて

5

方法boxed()のみ対応するラッパークラス(それぞれIntegerDouble、及びLong)にストリームの各プリミティブ値をボックスにいくつかのプリミティブ型(IntStreamDoubleStream、及びLongStream)のストリームのために設計されている参照。

Arrays.stream(toObjects(data))は、there is no such thing as a ByteStream classから既にボックス化されているStream<Byte>を返します。

1

まず、メソッドは必要ありません。すでにtoObjects()でそれを行い、Byteに変換してください。

第2に、このようなバイトのメソッドはありません。 int、doubleのために存在しますが、バイトは存在しません。 here

0

toObjects(data)Byte[]なのでArrays.asList(toObjects(data))を直接使用できます。 また、実際にStreamsを使用したい場合は、Stream.of(toObjects(data)).collect(Collectors.toList())がこのトリックを行う必要があります。

関連する問題