首页 > > > 手把手带你体验Stream流
阅读本文大概需要 4 分钟。
大家在自学时,大多数会学过一个程序:算出从数组元素的和,当时我们是怎么写的?一般来说是这样的:
public static void main(String[] args) {
int[] nums = { 1, 2, 3 };
int sum = ;
for (int i : nums) {
sum += i;
}
System.out.println("结果为:" + sum);
}
如果我们使用Stream流的话,可以这样:
public static void main(String[] args) {
int[] nums = { 1, 2, 3 };
int sum2 = IntStream.of(nums).sum();
System.out.println("结果为:" + sum2);
}
从代码量上可以明显看出,用Stream流的方式会少一些。
我理解的Stream流编程就是:某些场景会经常用到操作(求和/去重/过滤….等等),已经封装好API给你了,你自己别写了,调我给你提供的API就好了。
回到我们最原始的代码:
public static void main(String[] args) {
int[] nums = { 1, 2, 3 };
int sum = ;
for (int i : nums) {
sum += i;
}
System.out.println("结果为:" + sum);
}
如果我们想要for循环的内部支持并发的话,显然不太好去写。但使用Stream流的方式,调用一个方法就可以支持并发(parallel):
public static void main(String[] args) {
int[] nums = { 1, 2, 3 };
int sum2 = IntStream.of(nums).parallel().sum();
System.out.println("结果为:" + sum2);
}
优点:调API肯定是比自己写的代码量要少。
缺点:不方便调试
为什么要使用Stream流在我看来就是以上两个原因:


/**
* 返回的都是流对象
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<>();
// 从集合创建
Stream<String> stream = list.stream();
Stream<String> stream1 = list.parallelStream();
// 从数组创建
IntStream stream2 = Arrays.stream(new int[]{2, 3, 5});
// 创建数字流
IntStream intStream = IntStream.of(1, 2, 3);
// 使用random创建
IntStream limit = new Random().ints().limit(10);
}

my name is 007,代码如下:String str = "my name is 007";
Stream.of(str.split(" ")).filter(s -> s.length() > 2)
.map(s -> s.length()).forEach(System.out::println);
Stream<String> split = Stream.of(str.split(" "));
Stream<String> filterStream = split.filter(s -> s.length() > 2);
Stream<Integer> integerStream = filterStream.map(s -> s.length());
peek()是一个中间操作,返回的是Stream流对象,只要它不执行最终的操作,这个Stream是不会执行的。String str = "my name is 007";
Stream.of(str.split(" ")).peek(System.out::println); // 不会有信息打印
String str = "my name is 007";
Stream.of(str.split(" ")).peek(System.out::println).forEach(System.out::println)


for性能不比Stream API 差多少
往期精彩回顾
位运算符与(&)、或(|)、异或(^)、非(~)、左移(<<)、右移(>>)、右移补零(>>>)如何选择?

朕已阅 
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69902700/viewspace-3153878/ ,如需转载,请注明出处,否则将追究法律责任。