Java8新特性Stream之创建Stream流

Stream接口简介:
Stream是Java8中新加入具有强大功能的API,Stream是Java8中处理集合的关键抽象概念,可以帮助你对集合进行复杂的操作。总而言之,Stream API提供了一套高效又简便的操作方式。为什么要用Stream流?因为函数式编程带来的好处尤为明显。这种代码更多地表达了业务逻辑的意图,而不是它的实现机制。易读的代码也易于维护、更可靠、更不容易出错。
在Stream源码中有三十多个接口,功能强大,接下来一一介绍Stream功能。

文章目录

  • 一.如何创建Stream流

在Stream流中,实际上分为三部分,创建操作,中间操作,终止操作

  • 创建操作:创建Stream流
  • 中间操作:利用Stream对数据进行一系列的操作,比如筛选,切片……
  • 终止操作:比如打印出Stream流等操作,终止Stream流

一.如何创建Stream流

1⃣️:通过Collection集合提供的Stream()或parallelStream()

List<String> list = new ArrayList<>();
Stream<String> stream1 =list.Stream();

2⃣️:通过Arrays中的静态方法Stream()获取数组流

String[] array = {"a", "b", "c", "d", "e"};
Stream<string> stream2 = Arrays.stream(array);
Student[] stuList = new Student[10]; //创建学生类数组
Stream< Student > stream3 = Arrays.Stream(stuList); //用泛型限制

3⃣️:通过Stream类的静态方法of()

Stream<String> stream4  = Stream.of("java", "stream", "lambda");

4⃣️:无限流iterate

Stream<Integer> stream5 = Stream.iterate(0,x -> x+2);

Stream中的iterate方法:

  iterate(T seed,UnaryOperator< T > f)

iterate方法有两个参数,第一个参数seed表示为初始值的,第二个参数f为要应用于前一个元素以生成新元素的函数。该方法返回函数f迭代应用于初始元素种子所产生的无穷序列有序流。

如果我们对通过iterator产生的流,限制集合大小为10,并输出集合:

Stream<Integer> stream = Stream.iterate(0, x -> x+2);
stream.limit(10).forEach(System.out::println);

Output:

0
2
4
6
8
10
12
14
16
18

那么iterate方法的第二个参数类型为UnaryOperator< T >,UnaryOperator是一个函数式接口,继承了Function接口,下面是它的源码:

@FunctionalInterface
public interface UnaryOperator extends Function {
 
    /**
     * Returns a unary operator that always returns its input argument.
     *
     * @param  the type of the input and output of the operator
     * @return a unary operator that always returns its input argument
     */
    static  UnaryOperator identity() {
        return t -> t;
    }

这个接口,只接收一个泛型参数T,继承Function接口,也就是说,传入泛型T类型的参数,调用apply后,返回T类型的参数;这个接口定义了一个静态方法,返回泛型对象的本身;


4⃣️:无限流generate

Stream<Double> stream6 = Stream.generate(()-> Math.random());

Stream中的generate(Supplier< T > s)方法:参数为供给型接口


你可能感兴趣的:(Java函数式编程)