关于Collections集合工具类,函数式接口,Stream流

这篇博客介绍了Java中的Collections工具类,包括sort、reverse和shuffle等常用方法,以及函数式接口的概念和应用。文中详细阐述了Supplier、Consumer、Predicate和Function四大函数式接口的用途和方法。此外,还探讨了Stream流的生成、中间操作如filter、limit和skip,以及终结操作如forEach和collect。最后提到了Stream流的收集操作和其在数据处理中的优势。

Collections概述和使用【应用】

Collections类的作用:是针对集合操作的工具类

Collections类常用方法
    | public static void sort(List<T> list)    | 将指定的列表按升序排序             |
    | public static void reverse(List<?> list) | 反转指定列表中元素的顺序           |
    | public static void shuffle(List<?> list) | 使用默认的随机源随机排列指定的列表 |

函数式接口

函数式接口(java函数式表层体现的lambda表达式 所以函数式接口就是可以适用于lambda使用的接口(只有确保接口中有且只有一个抽象方法 java中的lambda表达式 才能顺利推导))

概念: 有且仅有一个抽象方法的接口

如何检测一个接口是不是函数式接口??
    @FunctionalInterface
    放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败

注意事项
    我们自己定义函数式接口的时候@FunctionalInterface是可选的,就算我不写这个注解,只要保证满足函数式接口定义的条件,也照样是函数式接口。但是,建议加上该注解

能用在哪
    函数式接口作为方法的参数【应用】
        如果方法的参数是一个函数式接口 我们可以使用lambda表达式作为参数传递 
    函数式接口作为方法的返回值【应用】
        如果方法的返回值是一个函数式接口 我们可以使用lambda表达式作为结果返回 

常用的函数式接口

常用函数式接口之Supplier【应用】:Supplier<T>接口也被称为生产型接口,如果我们指定了接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据供我们使用。

常用方法
    T get()按照某种实现逻辑(由Lambda表达式实现)返回一个数据

常用函数式接口之Consumer【应用】 Consumer<T>接口也被称为消费型接口,它消费的数据的数据类型由泛型指定

常用方法
        | void  accept(T t)                                    | 对给定的参数执行此操作                                     |
        | default Consumer<T>          andThen(Consumer after) | 返回一个组合的Consumer,依次执行此操作,然后执行 after操作 |

常用函数式接口之Predicate【应用】Predicate<T>接口通常用于判断参数是否满足指定的条件
常用方法
      | boolean test(T t)  | 对给定的参数进行判断(判断逻辑由Lambda表达式实现),返回一个布尔值 
      | default Predicate<T> negate()             | 返回一个逻辑的否定,对应逻辑非                            
      | default Predicate<T> and(Predicate other) | 返回一个组合判断,对应短路与                        
      | default Predicate<T> or(Predicate other)  | 返回一个组合判断,对应短路或       

常用函数式接口之Function【应用】 Function<T,R>接口通常用于对参数进行处理,转换(处理逻辑由Lambda表达式实现),然后返回一个新的值
常用方法
        | R  apply(T t)    | 将此函数应用于给定的参数                                     |
        | default <V> Function andThen(Function after) | 返回一个组合函数,首先将该函数应用于输入,然后将after函数应用于结果 |                   

Strem流(便于实现过滤操作(普通的过滤操作一次过滤 要来一次 显的过分复杂))

Stream流的好处
    - 直接阅读代码的字面意思即可完美展示无关逻辑方式的语义
    - Stream流把真正的函数式编程风格引入到Java中

分为那几个部分
    分为生成流(通过数据源(集合数组)生成流)

       生成Stream流的方式
    Collection体系集合:使用默认方法stream()生成流, default Stream<E> stream()
    Map体系集合:把Map转成Set集合,间接的生成流
    数组:通过Stream接口的静态方法of(T... values(可变参数 ))生成流


     中间操作(一个流后面可以跟随零个或多个中间操作 其目的主要是是打开流,做出莫种程度的数据过滤/映射)然后返回一个新的流 交给下一个操作使用

常用方法
| Stream<T> filter(Predicate predicate)           | 用于对流中的数据进行过滤                                  | |Stream<T> limit(long maxSize) | 返回此流中的元素组成的流,截取前指定参数个数的数据         
| Stream<T> skip(long n) | 跳过指定参数个数的数据,返回由该流的剩余元素组成的流       |
| static <T> Stream<T> concat(Stream a, Stream b) | 合并a和b两个流为一个流  |
| Stream<T> distinct()  | 返回由该流的不同元素(根据Object.equals(Object) )组成的流 |
| Stream<T> sorted() | 返回由此流的元素组成的流,根据自然顺序排序    |
| Stream<T> sorted(Comparator comparator) | 返回由该流的元素组成的流,根据提供的Comparator进行排序     |
| <R> Stream<R> map(Function mapper)| 返回由给定函数应用于此流的元素的结果组成的流 |
| IntStream mapToInt(ToIntFunction mapper) | 返回一个IntStream其中包含将给定函数应用于此流的元素的结果  |


    终结操作 一个流只能有一个终结操作 当这个操作执行后 流就被使用光了 无法再次被操作 说呀这必定是流的最后一个操作

Stream流终结操作方法【应用】
    | void forEach(Consumer action) | 对此流的每个元素执行操作 |
    | long count()                  | 返回此流中的元素数       |

Stream流的收集操作【应用】对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中。
    常用方法
        R collect(Collector collector)把结果收集到集合中
        用到的工具类 collectors提供了具体的收集方式
| public static <T> Collector toList()                         | 把元素收集到List集合中 |
| public static <T> Collector toSet()                          | 把元素收集到Set集合中  |
| public static  Collector toMap(Function keyMapper,Function valueMapper) | 把元素收集到Map集合中  |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值