stream 求和_「Java必修课」Java 8基本类型的Stream

Stream主要用于对象类型的集合,幸运的是,JDK还提供了基本类型的Stream,这让我们可以直接使用IntStream,而不是Stream。

fa2ab004bea0a7d1d87bd11de1aa3e60.gif

算术操作

我们经常会用求最小值、最大值、和、平均数等常用的操作,就以此为例开始吧:

int[] integers = new int[]{20, 98, 12, 7, 35};int min = Arrays.stream(integers) .min() .getAsInt();

我们使用Arrays的stream()方法创建了一个int类型的stream,通过min()求出最小值(OptionalInt),最后通过getAsInt()返回int的值。

另一个创建IntStream的方法如下:

int max = IntStream.of(23, 32, 98, 1, 3) .max() .getAsInt();

同样,求和与平均数都是非常便利的:

 int sum = IntStream.of(3, 2, 1).sum(); double avg = IntStream.of(73, 232, 232, 1) .average() .getAsDouble();
fa2ab004bea0a7d1d87bd11de1aa3e60.gif

范围操作

我们可以基本范围来生成基本类型的Stream,这个在写Unit Tests的时候可真是太方便了。

int sum1 = IntStream.range(1, 10) .sum();//return 45int sum2 = IntStream.rangeClosed(1, 10) .sum();//return 55

需要注意range()和rangeClosed()的区别,range()是exclusive最后一个值的,rangeClosed()是inclusive的。

遍历操作:

IntStream.rangeClosed(1, 5) .forEach(System.out::println);

并行操作:

IntStream.rangeClosed(1, 5) .parallel() .forEach(System.out::println);
fa2ab004bea0a7d1d87bd11de1aa3e60.gif

自动装箱和自动拆箱

有时我们需要将基本类型转化为对应的wrapper类型,就需要用到自动装箱操作:

List evenInts = IntStream.rangeClosed(1, 10) .filter(num -> num % 2 == 0) .boxed() .collect(Collectors.toList());

同时,我们也可以将wrapper类型转化为基本类型:

sum = Arrays.asList(1,2,3,4) .stream() .mapToInt( i -> i) .sum();
fa2ab004bea0a7d1d87bd11de1aa3e60.gif

总结

即使我们比较少会用到基本类型的流,但当我们需要用的时候,它可以提高我们的效率。

THE END

1c30f4b67f42a629db6484faca532d63.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值