jdk1.8新特性Stream流

概述

Stream流完全不是I/O流,按照流水线处理方式来考虑代码中的思想。
JDK1.8 之后,我们拥有了Lambda表达式,让代码的中心偏向解决实际问题,直到重点,可以提高效率。
Stream流中使用了大量Lambda表达式,利用Lambda操作方式,提供开发效率
在我们进行数据处理时有很大的帮助

获取Stream流的三种方式

数组

int[] arr = {1, 2, 3, 4, 5};
Arrays.stream(arr);

Collection集合

List<Integer> list = new ArrayList<Integer>();
list.stream();

int[] arr = {1, 2, 3, 4, 5};
Stream.of(arr);

stream常用方法

stream方法分为两种方法,一种是中间方法,一种是终结方法

  • 中间方法返回值是stream类型,可以进行流式操作。
  • 终结方法返回值不是stream类型,不可以进行流式操作。

stream中间方法

Stream<T> filter(Predicate<? super T> predicate)

这个方法是一个过滤方法,传入一个函数式接口predicate判定元素是否符合规定,然后进行剔除

List<Integer> list = new ArrayList<Integer>();

        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        Stream<Integer> stream = list.stream();

        stream.filter(integer -> integer >= 2).forEach(System.out::println);

filter方法效果

Stream<T> distinct()

这个方法用来去除流中重复的元素,这个方法需要重写比较对象的equals方法

List<Integer> list = new ArrayList<Integer>();

     list.add(1);
     list.add(2);
     list.add(2);
     list.add(3);
     list.add(4);
     list.add(5);
     list.add(5);

Stream<Integer> stream = list.stream();

stream.distinct().forEach(System.out::println);

distinct方法执行效果

<R> Stream<R> map(Function<? super T,? extends R> mapper)

这个方法用来处理流中每一个元素,用function函数式接口指明需要进行的操作

List<Integer> list = new ArrayList<Integer>();

 list.add(1);
 list.add(2);
 list.add(2);
 list.add(3);
 list.add(4);
 list.add(5);
 list.add(5);

 Stream<Integer> stream = list.stream();

 stream.map(s -> String.valueOf(s) + "我").forEach(System.out::println);

map运行结果示意图

static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)
这是一个静态方法,将两个流中的数据合并,生成一个新的流
```java
List<Integer> list = new ArrayList<Integer>();

	list.add(1);
	list.add(2);
	list.add(2);
	list.add(3);
	list.add(4);
	list.add(5);
	list.add(5);
	
	List<Integer> list2 = new ArrayList<Integer>();
	
	list2.add(1);
	list2.add(2);
	list2.add(2);
	
	Stream.concat(list.stream(), list2.stream()).forEach(System.out::println);

contact方法演示结果

Stream<T> sorted() 和 Stream<T> sorted(Comparator<? super T> comparator)
  • sorted() 是将流内数据按照自然排序的方式进行排序。
  • sorted(Comparator<? super T> comparator) 传入一个自定义的比较器,进行数据排序
List<Integer> list = new ArrayList<Integer>();

        list.add(1);
        list.add(2);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(5);


        list.stream().sorted().forEach(System.out::println);
        
        list.stream().sorted(Comparator.comparingInt(Integer::intValue)).forEach(System.out::println);

stream终结方法

<R,A> R collect(Collector<? super T,A,R> collector)

这个方法将已经是流的对象,重新转换成Colletion集合

List<Integer> list = new ArrayList<Integer>();

        list.add(1);
        list.add(2);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(5);

        List<Integer> collect = list.stream().filter(integer -> integer > 2).collect(Collectors.toList());
long count()

这个方法返回这个流中存在元素的个数

List<Integer> list = new ArrayList<Integer>();

   list.add(1);
   list.add(2);
   list.add(2);
   list.add(3);
   list.add(4);
   list.add(5);
   list.add(5);

   long count = list.stream().count();

   System.out.println(count);
发布了20 篇原创文章 · 获赞 18 · 访问量 5454

猜你喜欢

转载自blog.csdn.net/justLym/article/details/104825756