Java Stream流式编程

为了方便演示流的各种操作,这里数据统一用如下的 arr 集合

List<Integer> arr = Arrays.asList(5, 4, 3, 6, 6, 9, 8, 7, 1, 2);

1.forEach 遍历

函数原型:void forEach(Consumer<? super T> action)

描述:遍历所有元素,并执行相应操作

如:遍历所有元素 并打印

arr.stream().forEach( e -> {System.out.println(e); });

2.filter 过滤

函数原型:Stream<T> filter(Predicate<? super T> predicate)

描述:用参数(函数式接口,可以用lambda表达式)指定一个过滤条件,将过滤之后的数据放到一个新的Stream流中

如:利用filter将 大于等于5 的数据过滤出来,收集到list集合中

List<Integer> res = arr.stream().filter(e -> e >= 5).toList();

3.distinct 元素去重

函数原型:Stream<T> distinct()

描述:去除重复数据,将去重后的数据放到一个新的Stream流中

如:利用distinct对元素进行 去重,收集到list集合中

List<Integer> res = arr.stream().distinct().toList();

4.sorted 排序

函数原型:Stream<T> sorted(Comparator<? super T> comparator)

描述:根据指定的比较方式,对元素进行排序

如:对流中的元素进行 从小到大 排序,排序后的结果收集到list集合中

List<Integer> res = arr.stream().sorted((a, b) -> a - b).toList();

5.max min

函数原型:Optional<T> max(Comparator<? super T> comparator)

                  Optional<T> min(Comparator<? super T> comparator)

描述:根据指定的比较方式,拿到最大值或最小值封装到Optional对象中

如:利用max与min获取最大值,最小值

Integer max = arr.stream().max((a, b) -> a - b).get();
Integer min = arr.stream().min((a, b) -> a - b).get();

6.skip 跳过前几个

函数原型:Stream<T> skip(long n)

描述:跳过流中的前几个数据,将剩下的数据放到一个新的Stream流中

如:利用skip 跳过前3个元素,将剩余的元素放到list集合中

List<Integer> res = arr.stream().skip(3).toList();

7.limit 长度限制

函数原型:Stream<T> limit(long maxSize)

描述:从流中取出元素的个数不能超过maxSize

如:从流中 取出前五个元素

List<Integer> res = arr.stream().limit(5).toList();

8.collect 收集

函数原型:<R, A> R collect(Collector<? super T, A, R> collector)

描述:将流中的元素收集到指定类型的集合中(可以通过Collectors类中的静态方法指定,如toSet(),toList()等)

如:将流中的元素 收集到Set 集合中

Set<Integer> res = arr.stream().collect(Collectors.toSet());

9.map 数据映射

函数原型:<R> Stream<R> map(Function<? super T, ? extends R> mapper)

描述:对流中的每一个元素进行数据映射,将映射后的数据放到一个新的Stream流中

如:利用map进行将数据类型进行映射,将所有的数据都 映射为String 类型

List<String> res = arr.stream().map(e -> String.valueOf(e)).toList();

10.条件判断

allMatch 全满足

函数原型:boolean allMatch(Predicate<? super T> predicate)

描述:判断所有的元素是否都满足指定条件

如:判断所有的元素 是否都大于5

if (arr.stream().allMatch(e -> e > 5)){
    System.out.println("所有元素都大于5");
}

anyMatch 存在一个满足

函数原型:boolean anyMatch(Predicate<? super T> predicate)

描述:流中的所有元素,只要存在一个满足条件的,则返回true

如:判断 是否存在大于100 的元素

if (arr.stream().anyMatch(e -> e > 100)) {
    System.out.println("存在元素大于100");
}

noneMatch 都不满足

函数原型:boolean noneMatch(Predicate<? super T> predicate)

描述:如果所有元素都不满足条件,则返回true

如:判断所有元素 是否都不小于0

if (arr.stream().noneMatch(e -> e < 0)) {
    System.out.println("arr中的元素都不小于0");
}

11.reduce 合并元素

函数原型:Optional<T> reduce(BinaryOperator<T> accumulator)

描述:通过指定的操作对元素进行合并(如相加)

如:将所有的元素进行 相加,获取相加后的结果

Integer sum = arr.stream().reduce((a, b) -> a + b).get();

12.dropWhile 一直删除

函数原型:Stream<T> dropWhile(Predicate<? super T> predicate)

描述:指定一个条件,遇到第一个不满足条件的元素之前一直删除

如:删除前面 连续小于3的前缀

List<Integer> res = arr.stream()
                         .dropWhile(e -> e < 3)
                         .collect(Collectors.toList());

13.takeWhile 拿出

函数原型:Stream<T> takeWhile(Predicate<? super T> predicate)

描述:指定一个条件,遇到第一个不满足条件的元素之前一直取出

如:取出 连续大于3的前缀

List<Integer> res = arr.stream()
                            .takeWhile(e -> e > 3)
                            .collect(Collectors.toList());

14.flatMap 将流压平

函数原型:<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)

描述:指定一个操作元素函数(该函数会遍历所有元素),返回操作后的结果流

如:将二维数组转为一维数组,将 许多流压成一个流

Integer[][]arr2D = {
    {1,1,1},
    {2,2,2},
    {3,3,3}
};

//  [1, 1, 1, 2, 2, 2, 3, 3, 3]
Object[] res = Arrays.stream(arr2D)
                        .flatMap(a -> Arrays.stream(a))
                        .toArray();   

  • 29
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值