2015-06-12 45 views
2

我有一個簡單Stream,是爲了在字節工作:公共終端操作不適用於Stream <java.lang.Byte>嗎?

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

的編譯器會發出:

Error: incompatible types: inference variable T has incompatible bounds

equality constraints: java.lang.Byte

lower bounds: java.lang.Integer

,這也不起作用:

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

Error: incompatible types: java.util.Optional<java.lang.Integer> cannot be converted to java.util.Optional<java.lang.Byte>

我沒有找到任何文檔說明流不支持Byte。任何指針?

回答

5
b >> 1

返回不能自動轉換爲字節一個int。您可以添加演員表:

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

謝謝。出於某種原因,Intellij IDEA不停地告訴我該映射是從字節到字節的操作... –

+1

而且它是,但是您的實現返回了一個int –

+2

雖然,如果您在這一點上,也可以使用IntStream.of (0x1,0x2,0x3,0x4).mapToObj(b-vt>(byte)(b >> 1))。collect(Collectors.toList());'因爲沒有真正的理由讓'Byte'對象作爲資源… – Holger