Java8中Stream为什么要boxed
Java8中的有个⽣成随机数的Random类,先看下⾯代码,功能是⽣成100个随机数。数字在0到100之间。
Random random =new Random();
IntStream intStream = random.ints(0,100);
intStream.limit(100).boxed().List());
针对上⾯第⼆⾏和第三种代码个疑问:
1. IntStream是什么类型? 和stream什么区别。
2. boxed()⽅法是做什么的。
第⼀个问题:IntStream是int类型的流。stream<Integer 是Integer类型的流。
第⼆个问题:先看下boxed⽅法实现。
@Override
public final Stream<Integer>boxed(){
return mapToObj(Integer::valueOf);
}
IntStream是存的是int类型的stream,⽽Steam是⼀个存了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).List());java stream
所以我们⼀定要把它转成。Integer类型,像下⾯这种使⽤boxed转成了object类型
random.ints(0,100).limit(10).boxed().List());

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。