0
点赞
收藏
分享

微信扫一扫

java8第五课:StreamAPI简介与入门

兮城 2022-03-12 阅读 64


  这节课开始我们开始学Java8的另一个特性: Stream API

  首先说明,这玩意依然用的不多,但是,还是希望大家知道有这么个东西。


  什么是Stream API? 就是java8给我们提供了一个新的类叫Stream,这个类可以用来很方便的操作一组数据(集合、数组)。


  下面看代码:

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.Random;

import java.util.stream.Stream;



public class Teach01 {



public static void main(String[] args) {

/**

* 先来看看API文档。

* 首先,既然StreamAPI是java8的新特性,所以看java1.6的API文档是看不到的,要看1.8的

*

* 先来看看创建流的几个方法吧:

*

* 1. Collection有个方法stream()可以用来创建流

*

* 2. Arrays.stream()静态方法

*

* 3. Stream.of()静态方法

*

* 4. 无限流

* 通过Stream.iterate()或generat()方法产生无限流

*/



//1. Collection有个方法stream()可以用来创建流

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

for (int i = 0; i < 10; i++) {

list.add(String.valueOf(i));

}



//List是Collection的子接口,自然也有这个stream()方法

Stream<String> stream1 = list.stream();



//2. Arrays.stream()静态方法

String[] strings = new String[]{"1","2","3"};

Stream<String> stream2 = Arrays.stream(strings);



//3. Stream.of()静态方法'

Stream<Integer> stream3 = Stream.of(1, 2, 3);



//4. 无限流

//通过Stream.iterate()或generat()方法产生无限流



/**

* @param seed 种子

* 此参数将会被作为第二个参数的未实现方法的参数然后不断被执行

* @param f UnaryOperator类型

* UnaryOperator<T,T>继承Function<T,R>接口

* 所以UnaryOperator中未实现的抽象方法为T apply(T t)

*

*/

Stream<Integer> stream4 = Stream.iterate(0, (t) -> { return t + 2; });

/**

* iterate原理类似如下

* List iterate(Object seed,UnaryOperator f)

* {

* List list = new ArrayList();

* Object i = seed;

* int count = 0;

* while(true)

* {

* //这个maxsize就是limit里的,如果不设置就会陷入死循环不断地生成数据

* if(count >= maxsize)

* {

* break;

* }

* list.add(i);

* i = f.apply(i);

*

* }

* return list;

* }

*

*/



/**

* @Param s Supplier类型

* 未实现的抽象方法为: T get();

* generate就是用哪个get()不断的产生数据,同样可以用limit()控制数量

*/

Stream<Integer> stream5 = Stream.generate(() -> { return (new Random()).nextInt(); });



/**

* 接下来介绍常用方法:

* 1. forEach

* @Param action Consumer类型

* 未实现的方法为void accept(T t);

*

* 2. limit()

* @Param maxsize int

* 限制流操作的数据的个数

*/

//stream4.forEach(System.out::println);

//无限生成,所以叫无限流

stream4.limit(10).forEach(System.out::println);

}

}



举报

相关推荐

0 条评论