Java之Stream流初识

对于没有深入学习Java的我来说,第一次看到以后就会和IO流联想在一起,但事实并非如此,下面我们一一道来!

1.Stream流引入

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

2.获取Stream流

java.util.stream.Stream JDK1.8的新特征

  1. 所有的Collection集合都有对应的Stream();
  2. 可以通过Stream类中的static Stream of()获取
    static Stream of(T… t);
    static Stream of(T t);
List<String> list = new ArrayList<>();
list.add("宋江");
list.add("林冲");
list.add("关胜");
list.add("花荣");
Stream<String> stream = list.stream();

3.Stream流常用方法

3.1forEach方法(终结方法)

先来说说这个终结方法,就像我当初学车上去不问油门是哪个,先搞清楚刹车,能搞明白怎么把车停下来;
stream在使用forEach方法后,就不能再进行操作,否则发生异常

void foreach(Consumer<? super T> action);

终结方法:
需要一个Consumer接口进行操作处理,消耗一个数据
Consumer接口是一个【函数式接口】那就可以使用Lambda表达式
Consumer接口中方法是
void accept(T t);

stream.forEach(string ->System.out.println(string));
//遍历集合

3.2filter方法

Stream<T> filter(Predicate<? super T> condition);

filter是过滤方式,需要的参数是Predicate接口,Predicate是一个函数式接口,可以直接使用Lambda表达运行。
这里返回值类型是Stream类对象,是经过过滤之后的Stream类型,可以进行链式操作
Predicate接口中需要实现的方法 : boolean test(T t);

Stream<String> stringStream = list.stream().filter(s -> s.length() >= 3);

3.3 map方法

<R> Stream<R> map(Function<? super T, ? super R>fun);

类型转换操作,得到的一个转换之后数据类型的Stream流对象
这里需要的参数是Functtion函数式接口,
R apply(T t); T类型的数据转换成R类型数据

3.4 count方法

long count();

返回当前Stream流对象中有多少个元素
类似有Collection接口下的size(). String的length();
一旦执行Stream流对象被关闭

long count = list.stream().filter(s -> s.length() >= 3).count();

3.5 limit方法

Stream<T> limit(long maxSize);

对于当前Stream流对象操作的数据进行限制操作,限制个数到maxSize
例如:
Stream流中保存的有10个元素,limit 5 ==> 前五个元素

stream.limit(5).forEach(System.out::println);

这里直接输出前五个元素

3.6 skip方法

Stream<T> skip(long n);

返回值依然是一个Stream流对象,这里跳过当前Stream流对
象前n个元素

list.stream().skip(2).forEach(System.out::printl
n);

跳过前两个元素,直接打印后面的

3.7 concat方法

static Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)

拼接两个Stream流对象,是一个静态方法,得到新的Stream流对象

Stream<String> concat = Stream.concat(stream, stream1);
发布了10 篇原创文章 · 获赞 25 · 访问量 1975

猜你喜欢

转载自blog.csdn.net/weixin_44009147/article/details/104830475