Java8中Stream为什么要boxed

编程知识 行业动态 更新时间:2024-06-13 00:21:56

在介绍boxed前,先看下面一个案例

Java8中的有个生成随机数的Random类,先看下面代码,功能是生成100个随机数。数字在0到100之间。
Random random = new Random();
IntStream intStream = random.ints(0, 100);                 
intStream.limit(100).boxed().collect(Collectors.toList());

针对上面第二行和第三种代码个疑问:

  1. IntStream是什么类型? 和stream< Integer >什么区别。
  2. boxed()方法是做什么的。
第一个问题

IntStream是int类型的流。stream<Integer 是Integer类型的流。

第二个问题

看下boxed方法实现

@Override
public final Stream<Integer> boxed() {
    return mapToObj(Integer::valueOf);
}

IntStream是存的是int类型的stream,而Steam< Integer >是一个存了Integer的stream。boxed的作用就是将int类型的stream转成了Integer类型的Stream

比如下面这段代码就是很好理解了:

List<Integer> numbers = Arrays.asList(1, 2, 3, 3, 4, 5);
IntStream intStream = numbers.stream().mapToInt(i -> i);  //转成IntStream
Stream<Integer> boxed = intStream.boxed();                //转成Stream<Integer>

所以我们在用到这种原始int值的流,比如下面这种生成随机数的,得到IntStream在转成集合是不行的。会报错。

random.ints(0, 100).limit(10).collect(Collectors.toList()); //语法检测会报错

所以我们一定要把它转成Integer类型,像下面这种

random.ints(0, 100).limit(10).boxed().collect(Collectors.toList());

更多推荐

Java8中Stream为什么要boxed

本文发布于:2023-04-01 09:46:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/498a26592183ac54cbf2ac3ffb813df9.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Stream   boxed

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!