lambad表达式:是将函数式接口作为形参,lambad表达式作为实参,将行为作为参数传递
一、调用Collections.sort()方法,通过定值排序比较两个数进行排序
1、定制排序:指自定义比较器|定制排序(需要实现Comparator接口,重写compare方法)
2、自然排序:内部比较器|自然排序(需要实现Comparable接口,重写compare to方法)
二、String字符串的lambad表达式
1、声明函数式接口,接口中声明抽象方法,public String getValue(String str)
2、声明类,类中编写方法使用接口作为参数,能对一个字符串,进行某种操作,返回结果
三、数值的lambad表达式
1、声明一个带两个泛型的函数式接口,泛型类型为<T ,R>T为参数,R为返回值
2、接口中声明对应抽象方法
3、在类中声明方法,参数三个,两个long类型的参数,接口作为参数,接口实现中计算两个long型参数的和
函数式接口:要求只有一个必须被重写的抽象方法的接口
@FunctionalInterface 注解强制检测是否为函数式接口
java.util.function包下提供一系列的函数式接口
四大内置函数式接口:
Consumer<T>消费型接口(void accept(T t)对给定的参数执行此操作。)
Function<T,R>函数式接口(R apply (T t)将此函数应用于给定的参数)
Supplier<T>供给型接口(T get() 获取结果。)
Predicate<T>段言型接口(boolean test(T t)根据给定的参数计算此谓词)
方法引用(::)
简化lambad表达式(是lambad表达式的另外一种表现形式)
前提:当lambad体的实现是通过调用另外一个方法实现的,可以通过方法引用直接引用这个方法,用来简化完整的lambad表达式的结构
语法:1.lambad的参数列表与返回值要求能够一一对应lambad体中所引用方法的参数列表与返回值
2、lambad的返回值要求与所引用方法的返回值保持对应一致(1、lambad的参数列表如果只有一个参数:作为调用所引用的成员方法的对象存在;2、lambad的参数列表如果存在多个参数:第一个参数作为调用所引用的成员方法的对象存在,lambad的第二个参数开始,一 一对应匹配所引用方法的参数列表)
构造器引用:数据类型::new
Steam:(数据的渠道,用来操作由数据源(数组、集合)所产生的元素列表。)
IO流:传输数据;Stream流:操作数据,计算数据;数组|集合:存储数据
Stream流的特点:
1.Stream流本身不会存储数据
2.Stream不会修改数据源|源对象,每次会返回持有结果的新的流Stream
3.延迟执行|惰性加载:当获取终止行为时候,才会执行一系列的中间操作
4.流都是一次性的流,不能重复使用多次,一旦使用过就已经被破坏
步骤:
1.创建Stream(1)Collection->stream;2)Arrays->stream(数组);3)Stream.of(值列表))
2.一系列流式的中间操作(都会返回一个持有结果的新的流)
3.终止行为
中间操作:
1.过滤Stream fillter (Predicate<? super T> predicate);
2.去重 distinct()(比较equals与hashCode())
3.截取limit(long)从第一个开始截取几个
4.跳过skip(long) 跳过前n个
5.排序sorted()-->内部比较器(sorted()(Comparator)-->比较器)
6.映射 map(Function fun) stream操作的每一个数据都所用于参数函数,映射成一个新的结果,最后返回一个持有映射后的新的结果的流
终止行为:
1.遍历 foreach(Consumer)
2.查找与匹配
//allMatch-检查是否匹配所有元素
//anyMatch-检查是否至少匹配一个元素
//noneMatch-检查是否没有匹配所有元素
//findFirst-返回当前流中的任意元素
//findAny-返回当前流中的任意元素
//count-返回流中元素的总个数
//max-返回流中最大值
//min-返回流中最小值
3.规约 redue(map->reduce;加工->计算结果)
4.收集(collect())