Stream流

Stream流的作用:

区别于IO流,Stream流是jdk1.8的新东西,用来对容器(集合,数组)操作进行书写简化,配合众多函数式接口以及lambda表达式,方法引用,集合的遍历,计数,过滤,映射,截取等操作变得异常优雅,上流。以往对集合的操作最简单的如遍历就是用for循环,函数式编程思想的引入,使得我们对这一遍历的实现操作有了新的认识,遍历取出每个元素是我们的目的,而for循环从1到最后取只是手段,在函数式编程注重行为而非过程的思想下,引入Stream流来简化对集合,数组的遍历等操作。

Stream流:

获取一个Stream流(一个)→中间方法(可多个)→终结方法(一个)

使用范围:

单列集合:集合对象.stream()

双列集合:不能直接获取,需间接获取

                 集合对象.keySet().stream()

                集合对象.entrySet().stream()

                两个返回的都是Set集合(单列)

数组:Arrays.stream(数组名)  Arrays是数组的工具类

同种数据类型的多个数据:Stream.of(数据1,数据2,数据3...)

                                                Stream.of(E... e) 参数为可变参数

中间方法:

stream<T> filter (Predicate p ) :过滤

Predicate接口 中的方法

boolean test(T t)对给定的参数进行判断,并返回布尔值(true留下,false不要)

理解:可以从匿名内部类

list.stream().filter(new Predicate<String>(){

@Override

public boolean test (String s){

boolean r = s.startWith("张");

return r;

}

})

------简写

list.stream().filter(s->s.startWith("张"));

其他常用中间方法:

Stream<T> limit(long maxSize)截取指定参数个数的数据(从第几个往前截取,后面不要)
Stream<T> skip(long n)跳过指定参数个数的数据(从第几个往后开始截取,前面的不要)
static<T> Stream<T> concat(Stream a , Stream b )

合并a和b为一个流

调用方式:Stream.concat(...)

Stream<T> distinct()取出流中重复的元素,依赖hashcode和equals方法

结束方法:

void forEach(Consumer action)

对此流的每一个元素执行操作

Consumer接口 方法

void accept(T t)对给定的参数执行此操作

long count()

返回此流中的元素个数

注意:在Stream流中无法直接修改集合、数组等数据源中的数据

但可以对流进行收集操作

Stream流的收集操作:

R collect(Collector c)

工具类Collectors提供了具体的收集方法

public static<T> Collector toList()把元素收集到List集合中
public static<T> Collector toSet()把元素收集到Set集合中(不包含重复元素)
public static Collector toMap(Function keyMapper, Function valueMapper)

把元素收集到Map集合中

如何应用?

list<String> s = list1.stream().filter(~).collect(collectors.toList());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值