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

Chr*_*ich 2 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());
Run Code Online (Sandbox Code Playgroud)

编译器给出:

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

平等约束: java.lang.Byte

下界: java.lang.Integer

这也行不通:

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

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

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

ass*_*ias 5

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

.map(b -> (byte) (b >> 1))
Run Code Online (Sandbox Code Playgroud)

  • 但是,如果你在这一点上,你也可以使用`IntStream.of(0x1,0x2,0x3,0x4).mapToObj(b->>(byte)(b >> 1)).collect(Collectors.toList( ));`因为没有真正的理由让`Byte`对象作为源... (2认同)