Java 8 Streams:对于类型Stream <byte>

时间:2017-11-05 21:19:35

标签: java java-8 java-stream boxing

我正在尝试将字节数组转换为LinkedList<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;
}

第一行引发一条错误消息:

  

方法boxed()未定义类型Stream<Byte>

我知道为什么会收到此错误消息以及如何解决此问题?

3 个答案:

答案 0 :(得分:5)

方法boxed()仅适用于某些原始类型(IntStreamDoubleStreamLongStream)的流,以将流的每个原始值框中到相应的包装类(IntegerDoubleLong分别)。

表达式Arrays.stream(toObjects(data))会返回Stream<Byte>,该String sqlSearchByProduct = " SELECT ID, pID,pGroupID, pName, pPrice, Status, Stock FROM productsTable WHERE (pGroupID= ProductGroupIDDropDownList.SelectedItem.Value)"; sqlDataSource.SelectCommand = sqlSearchByProduct ; there is no such thing as a ByteStream class以来已经装箱。

答案 1 :(得分:0)

首先,您不需要boxed()方法 - 您已经在toObjects()中自行完成,并将其转换为Byte

其次,没有这样的字节方法。它存在于int,double,但不是字节。见here

答案 2 :(得分:0)

根据您要执行的操作,您可以直接使用Arrays.asList(toObjects(data)),因为toObjects(data)的类型为Byte[]。 或者,如果你真的想使用Streams,那么Stream.of(toObjects(data)).collect(Collectors.toList())应该可以做到这一点。