pkslow.com 南瓜慢说

  • AllArticles
  • Container
  • Spring
  • Life
  • Cloud
  • Collections
  • About
  • GitHub

  • Search
Terraform101 English Terraform Middleware config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac Plan Stream MongoDB Spring DevOps JVM String Map Set List Performance Email Springboot JavaCollections ArrayList Java

Java 8基本类型的Stream

Created on: 2019-09-25 | Category: Java | 0 | View: 587

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

1 算术操作

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

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();

2 范围操作

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

int sum1 = IntStream.range(1, 10).sum();//return 45
int 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);

3 自动装箱和自动拆箱

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

List<Integer> 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();

4 总结

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


Code for all: GitHub

欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

file

Recommendations:
Cloud Native
Terraform
Container: Docker/Kubernetes
Spring Boot / Spring Cloud
Https
如何制定切实可行的计划并好好执行

  • Author 作者: LarryDpk 南瓜慢说
  • Link 链接: https://www.pkslow.com/archives/java8-primitive-streams
  • 版权声明: 本博客所有文章除特别声明外,不可转载!
# Terraform101 # English # Terraform # Middleware # config # Go # Private # Kubernetes # pkslow # Test # HTTPS # Redis # Docker # Mac # Plan # Stream # MongoDB # Spring # DevOps # JVM # String # Map # Set # List # Performance # Email # Springboot # JavaCollections # ArrayList # Java
Terraform101 English Terraform Middleware config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac Plan Stream MongoDB Spring DevOps JVM String Map Set List Performance Email Springboot JavaCollections ArrayList Java
Java双大括号{}的初始化
Mac查看端口占用
  • Contents
  • Site Overview
南瓜慢说

南瓜慢说

多年Java开发,主要专注后端技术:Java/Spring/Springboot/微服务/大数据等。

多读书,多分享;多写作,多整理。

241 Posts
9 Categories
30 Tags
RSS
0%
© 2020 — 2022 南瓜慢说 pkslow The WebSite keeping alive:   粤ICP备20036375号