公共终端操作不能与Stream <java.lang.byte>一起使用吗?

时间:2015-06-12 09:29:50

标签: java byte java-8 java-stream

我有一个简单的Stream,它适用于字节:

List<Byte> byteList = Arrays.stream(new Byte[]{0x1, 0x2, 0x3, 0x4})
        .map(b -> b >> 1)
        .collect(Collectors.toList());

编译器给出:

  

错误:不兼容的类型:推理变量T具有不兼容的边界

     

平等约束:java.lang.Byte

     

下限:java.lang.Integer

这也不起作用:

Optional<Byte> aByte = Arrays.stream(new Byte[]{0x1, 0x2, 0x3, 0x4})
        .map(b -> b >> 1)
        .findFirst();
  

错误:不兼容的类型:java.util.Optional<java.lang.Integer>无法转换为java.util.Optional<java.lang.Byte>

我没有找到任何说明流不支持Byte的文档。有什么指针吗?

1 个答案:

答案 0 :(得分:5)

b >> 1返回一个无法自动转换为byte的int。你可以添加一个演员:

.map(b -> (byte) (b >> 1))