函数式接口&Stream流
1.函数式接口
概念
有且仅有一个抽象方法的接口
如何检测一个接口是不是函数式接口
@FunctionalInterface
放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败
注意事项
我们自己定义函数式接口的时候,@FunctionalInterface是可选的,就算我不写这个注解,只要保证满足函数式接口定义的条件,也照样是函数式接口。但是,建议加上该注解
1.2函数式接口作为方法的参数
需求描述
定义一个类(RunnableDemo),在类中提供两个方法
一个方法是:startThread(Runnable r) 方法参数Runnable是一个函数式接口
一个方法是主方法,在主方法中调用startThread方法
1.3函数式接口作为方法的返回值
需求描述
定义一个类(ComparatorDemo),在类中提供两个方法
一个方法是:Comparator getComparator() 方法返回值Comparator是一个函数式接口
一个方法是主方法,在主方法中调用getComparator方法
1.4常用函数式接口之Supplier
Supplier接口
Supplier接口也被称为生产型接口,如果我们指定了接口的泛型是什么类型,那么接口中的get方法就会生产
什么类型的数据供我们使用。
常用方法
只有一个无参的方法
T get()
按照某种实现逻辑(由Lambda表达式实现)返回一个数据
1.5常用函数式接口之Consumer
v>
Consumer接口
Consumer接口也被称为消费型接口,它消费的数据的数据类型由泛型指定
常用方法
Consumer:包含两个方法
void accept(T t)
对给定的参数执行此操作
default Consumer andThen(Consumer
after)
返回一个组合的Consumer,依次执行此操作,然后执行
after操作
1.6常用函数式接口之Predicate
Predicate接口
Predicate接口通常用于判断参数是否满足指定的条件
常用方法
boolean test(T t)
对给定的参数进行判断(判断逻辑由Lambda表达式实现),返回
一个布尔值
default Predicate negate()
返回一个逻辑的否定,对应逻辑非
default Predicate and(Predicate
other)
返回一个组合判断,对应短路与
default Predicate or(Predicate
other)
返回一个组合判断,对应短路或
1.7常用函数式接口之Function
Function接口
Function<T,R>接口通常用于对参数进行处理,转换(处理逻辑由Lambda表达式实现),然后返回一个新的值
常用方法
R apply(T t)
将此函数应用于给定的参数
default Function
andThen(Function after)
返回一个组合函数,首先将该函数应用于输入,然后将after函
数应用于结果
2.Strem流
2.1体验Stream流
案例需求
按照下面的要求完成集合的创建和遍历
创建一个集合,存储多个字符串元素
把集合中所有以"张"开头的元素存储到一个新的集合
把"张"开头的集合中的长度为3的元素存储到一个新的集合
遍历上一步得到的集合
Stream流的好处
直接阅读代码的字面意思即可完美展示无关逻辑方式的语义:获取流、过滤姓张、过滤长度为3、逐一打印Stream流把真正的函数式编程风格引入到Java中
2.2Stream流的常见生成方式
生成Stream流的方式
Collection体系集合
使用默认方法stream()生成流, default Stream stream()
Map体系集合
把Map转成Set集合,间接的生成流
数组
通过Stream接口的静态方法of(T... values)生成流
2.3Stream流中间操作方法
概念
中间操作的意思是,执行完此方法之后,Stream流依然可以继续执行其他操作。
常见方法
v>
Stream fifilter(Predicate predicate)
用于对流中的数据进行过滤
Stream limit(long maxSize)
返回此流中的元素组成的流,截取前指定参数个数的数据
Stream skip(long n)
跳过指定参数个数的数据,返回由该流的剩余元素组成的
流
static Stream concat(Stream a, Stream
b)
合并a和b两个流为一个流
Stream distinct()
返回由该流的不同元素(根据Object.equals(Object) )组
成的流
Stream sorted()
返回由此流的元素组成的流,根据自然顺序排序
Stream sorted(Comparator
comparator)
返回由该流的元素组成的流,根据提供的Comparator进行
排序
Stream map(Function mapper)
返回由给定函数应用于此流的元素的结果组成的流
IntStream mapToInt(ToIntFunction
mapper)
返回一个IntStream其中包含将给定函数应用于此流的元素
的结果
2.4Stream流终结操作方法
概念
终结操作的意思是,执行完此方法之后,Stream流将不能再执行其他操作。
常见方法
void forEach(Consumer action)
对此流的每个元素执行操作
long count()
返回此流中的元素数
2.5Stream流的收集操作
 
 
 
 
概念
对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中。
常用方法
R collect(Collector collector)
把结果收集到集合中
工具类Collectors提供了具体的收集方式
public static Collector toList()
把元素收集到List集合中
public static Collector toSet()
把元素收集到Set集合中
public static Collector toMap(Function keyMapper,Function
valueMapper)
把元素收集到Map集合
中
                    
                
                
            
        
浙公网安备 33010602011771号