jdk8中Stream的使用

Stream操作三个步骤

  1. 创建Stream

一个数据源( 如: 集合、数组 ) , 获取一个流

  1. 中间操作

一个中间操作链,对数据源的数据进行处理

  1. 终止操作(终端操作)

一旦执行终止操作,就执行中间操作链,并产生结果.之后,就不会再被使用

创建Stream的四种方式

方式一:通过集合

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();

方式二:通过数组

Integer[] arr={1,2,3,4};
Stream<Integer> stream = Arrays.stream(arr);

方式三:通过Stream.of()

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

方式四:创建无限流

#1. 迭代
Stream.iterate(0, t->t+1).forEach(System.out::println);
#2. 创建无限流
Stream.generate(Math::random).forEach(System.out::println);

Stream中间操作

筛选与切片

filter(Predicate p) ---接受Lambda表达式,从流中排除某些元素.

stream.filter(item->item>10).forEach(System.out::println);

limit(n) ---截断流,使其元素不超过给定数量

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

skip(n) ---跳过元素,返回一个扔掉了前 n 个元素的流,

stream.skip(n).forEach(System.out::println);

distinct() --筛选,通过流所生成元素的hashCode() 和 equals() 去除重复数据

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

映射

map(Function f) ---接受一个函数作为参数,该函数会被应用到每个元素上

List<String> list = Arrays.asList("a");
list.stream().map(String::toUpperCase).forEach(System.out::println);

flatMap(Function f) ---接受一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接为一个流

应用在funection返回值为一个Stream的时候

排序

sorted() ---自然排序

List<Integer> list = Arrays.asList(1,3,5,1,3);
list.stream().sorted().forEach(System.out::println);

sorted(Comparator com) ---定制排序

List<Integer> list = Arrays.asList(1,6,1,3);
list.stream().sorted(
(v1,v2)-> -Integer.compare(v1, v2)
).forEach(System.out::println);

Stream终止操作

匹配与查找

allMatch((Predicate predicate) 检查是否匹配所有元素

List<Integer> list = Arrays.asList(1,6,1,3);
boolean b = list.stream().allMatch(v -> v > 0);

anyMatch(Predicate predicate) 检查是否匹配至少一个元素

noneMatch(Predicate predicate) 检查是否没有匹配所有元素

findFirst() 返回第一个元素

findAny 返回当前流中的任意元素

count() 返回流中元素总数

max(Comparator comparator) 返回流中最大值

min(Comparator comparator) 返回流中最小值

forEach(Comparator comparator) 内部迭代

归纳

reduce(T identity, BinaryOperator<T> accumulator); ---将流中元素反复结合起来,得到一个值

List<Integer> list = Arrays.asList(1,6,1,3);
Integer reduce = list.stream().reduce(10, Integer::sum);
System.out.println(reduce);

收集

collect(Collector c) ---将流转为其他形式.接受一个Collector接口的实现

list.stream().collect(Collectors.toList());

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值