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

被折叠的 条评论
为什么被折叠?



