如何利用Arrays.stream()获取byte[]类型的Stream?
如何将byte[]转换为Stream?
Java 8引入的Arrays.stream()方法可将基本类型数组转换为Stream,但该方法仅支持double[]、int[]和long[],并不支持byte[]。
可行的解决办法
如果需要将byte[]转换为Stream,可通过以下方式实现:
- 借助IntStream间接转换
利用byte可向上转型为int的特性,先通过下标遍历生成IntStream,再映射为Byte对象流:byte[] byteArr = {10, 20, 30}; Stream<Byte> byteStream = IntStream.range(0, byteArr.length) .mapToObj(index -> byteArr[index]); - 直接使用StreamSupport构建
既然Arrays.stream()底层依赖StreamSupport实现,我们可以直接手动用它创建byte的流:byte[] byteArr = {10, 20, 30}; Stream<Byte> byteStream = StreamSupport.stream( Spliterators.spliterator(byteArr, Spliterator.ORDERED), false // 需并行流则设为true,串行流设为false ); - 升级至Java 9及以上版本
Java 9之后Arrays类新增了支持byte[]的stream()重载方法,可直接调用:byte[] byteArr = {10, 20, 30}; Stream<Byte> byteStream = Arrays.stream(byteArr);
为什么Java 8的Arrays.stream()不支持byte[]?
Java 8中Arrays.stream()的实现依赖StreamSupport类,但该类当时并未提供针对byte[]的专用构建方法,因此Arrays.stream()也就没有支持byte[]的重载版本。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

