美文网首页
详解Java8新特性 - stream,stream用法、怎么使

详解Java8新特性 - stream,stream用法、怎么使

作者: 王月亮17 | 来源:发表于2022-08-10 08:38 被阅读0次

stream是Java8中最好用的特性之一,也可以说最好用的特性,没有之一。它可以让我们的开发更加简洁高效,可以让代码更加美观,总之好处多多,用起来也是十分的舒服。
废话不多说,开始实战。

  1. 最常用的一个,遍历:
Integer[] intArray = new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Integer> intList = Arrays.asList(intArray);
intList.stream().forEach(System.out::println);

通常这样的代码会被要求改为

Integer[] intArray = new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Integer> intList = Arrays.asList(intArray);
intList.forEach(System.out::println);

因为这样的简单遍历确实也没必要使用stream。

  1. 并行遍历:
Integer[] intArray = new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Integer> intList = Arrays.asList(intArray);
intList.stream().parallel().forEach(System.out::println);

这个也可以简写为:

Integer[] intArray = new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Integer> intList = Arrays.asList(intArray);
intList.parallelStream().forEach(System.out::println);

但是这个使用需谨慎,有两点需要注意:

  • 如果list过大,可能会开过多线程消耗资源;
  • 如果后面要使用list,做一些处理,那么可能处理的时候遍历还没有执行完;
  1. 用来声明一个list:
List<Integer> integerList = Stream.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9).collect(Collectors.toList());

这样可以很方便地生成一个list,不需要再去声明一个list然后一个一个add或者声明一个数组再转成list。

  1. filter的使用
    filter顾名思义就是一个过滤器(关于函数式接口的内容这里就不详述了,后面再单独写一篇),可以过滤出你想要的部分。
    比如说上面的list,过滤出所有的偶数:


    image.png

    filter()的括号里面其实就是一个函数式接口,接收一个参数然后返回表达式的布尔值,是true的留下,false的就过滤掉了。

  2. map的使用
    map是可以将stream中的所有元素操作后生成新的list,比如要将上面的list中所有的元素加1:


    image.png
  3. flatMap的使用
    先看一下这个代码:

List<String> stringList = Stream.of("a:b:c", "d:e:f").collect(Collectors.toList());
List<String[]> resultList = stringList.stream().map(s -> s.split(":")).collect(Collectors.toList());
resultList.forEach(result -> System.out.println(Arrays.toString(result)));

我是想把这个stringList的所有元素拆分,但是使用map拆分之后的效果就是得到了一个String[]数组的list,打印和使用都很不方便。输出结果:

[a, b, c]
[d, e, f]

但是如果使用flatMap的话:

List<String> stringList = Stream.of("a:b:c", "d:e:f").collect(Collectors.toList());
List<String> resultList = stringList.stream().flatMap(s -> Stream.of(s.split(":"))).collect(Collectors.toList());
System.out.println(resultList);

那么输出结果就是一个String的list了,如下:

[a, b, c, d, e, f]

不管是打印还是使用,就都非常方便了。

相关文章

网友评论

      本文标题:详解Java8新特性 - stream,stream用法、怎么使

      本文链接:https://www.haomeiwen.com/subject/lqkvbrtx.html