Java8 Stream流

本文介绍了JavaStreamAPI的两种创建方式,包括从Collection获取流和使用静态方法of,以及Stream的重要注意事项。详细讲解了forEach、count、filter、limit、skip、map、sorted、distinct、match、find、max、min和reduce等常用方法的用法示例。
摘要由CSDN通过智能技术生成

目录

获取Stream流的两种方式

 根据Collection获取流

 Stream中的静态方法of获取流

 Stream注意事项

Stream流的常用方法

forEach方法

count方法

filter方法

limit方法

skip方法

map方法

sorted方法

distinct方法

match方法 

find方法

max和min方法

reduce方法


Stream是流式思想,相当于工厂的流水线,对集合中的数据进行加工处理

获取Stream流的两种方式

 根据Collection获取流

 java.util.Collection 接口中加入了default方法 stream 用来获取流,所以其所有实现类均可获取流。

//根据Collection获取流
List list=new ArrayList();
list.addAll(Arrays.asList("a","b","c"));
list.stream().forEach(System.out::println);

 Stream中的静态方法of获取流

由于数组对象不可能添加默认方法,所以 Stream 接口中提供了静态方法 of 获取流

// 创建一个Stream
Stream<String> stream = Stream.of("apple", "banana", "cherry");
// 打印Stream中的元素
stream.forEach(System.out::println);
注意:基本数据类型的数组不行

 Stream注意事项

1. Stream只能操作一次
2. Stream方法返回的是新的流
3. Stream不调用终结方法,中间的操作不会执行


Stream流的常用方法

forEach方法

forEach 用来遍历流中的数据,该方法接收一个 Consumer 接口函数,会将每一个流元素交给该函数进行处理

list.stream().forEach((String s) -> {
System.out.println(s);
});
//简写
list.stream().forEach(System.out::println);

count方法

Stream流提供 count 方法来统计其中的元素个数

该方法返回一个long值代表元素个数

List list=new ArrayList();
list.addAll(Arrays.asList("a","b","c"));
System.out.println(list.stream().count());

filter方法

filter用于过滤数据,返回符合过滤条件的数据,filter 方法将一个流转换成另一个子集流

该接口接收一个 Predicate 函数式接口参数(可以是一个Lambda或方法引用)作为筛选条件

//这里通过名字长度为两个字作为筛选条件:
List<String> list1 = new ArrayList<>();
Collections.addAll(list1, "张三", "李四", "王五", "赵一西");
list1.stream().filter(s -> s.length() == 2).forEach(System.out::println);

limit方法

limit 方法可以对流进行截取,只取用前n个

参数是一个long型,如果集合当前长度大于参数则进行截取。否则不进行操作

list1.stream().filter(s -> s.length() == 2).limit(2).forEach(System.out::println);

skip方法

如果希望跳过前几个元素,可以使用 skip 方法获取一个截取之后的新流

如果流的当前长度大于n,则跳过前n个;否则将会得到一个长度为0的空流。

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

map方法

需要将流中的元素映射到另一个流中,可以使用 map 方法

//map 方法用于对流中的元素进行转换,转换方法为 Integer.parseInt()。
Stream<String> original = Stream.of("11", "22", "33");
Stream<Integer> result = original.map(Integer::parseInt);
result.forEach(s -> System.out.println(s + 10));

sorted方法

数据排序,使用 sorted 方法

Stream<T> sorted(); --根据元素的自然顺序排序
Stream<T> sorted(Comparator<? super T> comparator); --根据比较器指定的规则排序

Stream.of(33, 22, 11, 55)
  .sorted((o1, o2) -> o2 - o1)
  .forEach(System.out::println);

distinct方法

distinct 方法:去除重复数据

Stream.of(22, 33, 22, 11, 33)
.distinct()
.forEach(System.out::println);

match方法 

需要判断数据是否匹配指定的条件,可以使用 Match 相关方法

boolean allMatch(Predicate<? super T> predicate);--元素是否全部满足条件
boolean anyMatch(Predicate<? super T> predicate);--元素是否任意有一个满足条件
boolean noneMatch(Predicate<? super T> predicate);-- 元素是否全部不满足条件

find方法

查找数据

Optional<T> findFirst();
Optional<T> findAny();
Optional<Integer> first = Stream.of(5, 3, 6, 1).findFirst();
System.out.println("first = " + first.get());
Optional<Integer> any = Stream.of(5, 3, 6, 1).findAny();
System.out.println("any = " + any.get());

max和min方法

要获取最大和最小值

Optional<Integer> max = Stream.of(5, 8, 6, 3).max((o1, o2) -> o1 - o2);
System.out.println("first = " + max.get());
Optional<Integer> min = Stream.of(5, 8, 6, 3).min((o1, o2) -> o1 - o2);
System.out.println("any = " + min.get());

reduce方法

将所有数据归纳得到一个数据

int reduce = Stream.of(4, 5, 3, 9)
.reduce(0, (a, b) -> {
System.out.println("a = " + a + ", b = " + b);
return a + b;
});
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值