JAVA8新特性-lambda表达式的使用
Java1.0-java16.0版本
有两个大版本:java5 加入了并发包,JUC(java.util.concurrent) concurrentMap 1.5以后的
java8加入了lambda表达式,接口新特性,日期新特性,可选项 。。。
lambda表达式:
注意:如果我们自定义的这种接口,只有一个抽象方法的接口才可以使用lambda表达式,因此这种接口我们称之为函数式接口,我们可以使用函数式注解@FunctionalInterface表示接口为函数式接口
java也为我们提供了几种函数式接口,在rt.jar包下,java.util.function包下
这些接口我们可以归结为四大类:
Consumer:消费型接口 ------ 这种接口就是我给你值,你去消费就可以了,像打印,保存数据等
Supplier:供给型接口 ----- 这种接口就是接口给我们值,提供给我们值,我们来消费
Predicate:断言型接口 ----- 我们来判断这个参数是正确的还是错误的,比如参数不符合要求,逻辑是错的
Function:函数型接口 ----- 这种接口就是我给你参数,你给我返回值
提示:静态方法是类名 调用 类名::方法名 构造方法:类名 ::new 普通方法:对象变量名::方法名
当我们想写的表达式逻辑,和返回值与已经存在的某一个类的方法一摸一样,那么就不用再写一遍了
关于方法的引用:
构造函数的引用:
lambda表达式的流式操作(Stream接口):
Collection(集合)的获取:可以通过 Collection.stream() 或者 Collection.parallelStream() 来创建一个Stream
Map的获取:不能直接获取Stream类型:1、keySet().stream();2、values().stream();3、entrySet().stream()
3、数组的获取:Stream中的of方法,Stream.of(数组)
Stream中的常用方法:
1、终结方法:调用完成之后,返回值不再是Stream类型本身,无法继续调用Stream中的方法,例如:forEach、count,collect
2、延迟方法:调用完成之后,返回值还是Stream类型,可以继续调用Stream中的各种方法;除了终结方法,全都是延迟方法
例如:Stream<T> filter(Predicate<? super T> pre): 根据pre描述的判断条件,对流中的数据进行过滤
Stream<T> limit(long maxSize):根据参数maxSize描述的个数,对流中的数据进行截取
Stream<T> skip(long n):跳过参数n描述的个数,流中剩余的是n之后的内容
Stream<R> map(Function<? super T, R> fun ):将流中的所有T类型数据,都根据fun这个函数型接口,转换成其他的R类型数据
forEach(Consumer<? super T> con):将流中的数据,根据con描述的处理方式,进行处理
long count():返回流中的元素数
补充:java8其他新特性
Optional类:避免空指针的
Optional.of():要求放入的对象不为null
Optional.ofNullable():Optional<String> op = Optional.ofNullable(str); String s = op.orElseGet(() -> "默认值"); //如果有值,直接获取,如果值为null,那就可以获取默认值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了