-
lambda:(重点)
-
概念:就是对函数式接口匿名内部类的简写
-
作用:简化代码
-
使用:
语法:
函数式接口 变量名 = (参数1,参数2…) -> {
//方法体
}
(参数1,参数2…)表示参数列表;
->表示连接符;连接符号后是方法体
{}内部是方法体
特点说明:
普通方法的写法
1、=右边的类型会根据左边的函数式接口类型自动推断;
2、如果形参列表为空,只需保留();
3、如果形参只有1个,()可以省略,只需要参数的名称即可;
4、如果执行语句只有1句,且无返回值,{}可以省略,
若有返回值,则若想省去{},则必须同时省略return,且执行语句也保证只有1句;
5、形参列表的数据类型会自动推断;
6、lambda不会生成一个单独的内部类文件;
7、lambda表达式若访问了局部变量,则局部变量必须是final的,
若是局部变量没有加final关键字,系统会自动添加,此后在修改该局部变量,会报错; -
lambda中方法引用:(重点)
https://blog.csdn.net/weixin_42022555/article/details/81943263
可以看看4.1. 静态方法引用
语法 : 类名::方法名
注意事项:
被引用的方法参数列表和函数式接口中抽象方法的参数一致!!
接口的抽象方法没有返回值,引用的方法可以有返回值也可以没有
接口的抽象方法有返回值,引用的方法必须有相同类型的返回值!!
由于满足抽象参数列表与引用参数列表相同,所以可以写成静态方法引用的格式4.2. 实例方法引用
语法 : 对象名::非静态方法名
注意事项:
被引用的方法参数列表和函数式接口中抽象方法的参数一致!!
接口的抽象方法没有返回值,引用的方法可以有返回值也可以没有
接口的抽象方法有返回值,引用的方法必须有相同类型的返回值!!4.3. 构造方法引用
语法 :类名::new
注意事项:
被引用的类必须存在一个构造方法与函数式接口的抽象方法参数列表一致4.4. 数组构造方法引用
语法 :数据类型[]::new4.5. 特定类型的方法引用
语法 :类名::非静态方法4.6.
类中方法调用父类或本类方法引用
语法 :
this::方法名
super::方法名
-
-
Stream流(重点)
Stream:
1. 概念:就是java支持的一种流水线式处理数据的方式
2. 作用:Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理,
比如筛选, 排序,聚合等。3. 使用: 流的数据来源: • 数据源 流的来源。 可以是集合,数组,I/O channel (nio new IO非阻塞式IO), 产生器generator 等。 • 聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。 获取Stream:方式 Collection体系下都有这两个方法(直接通过集合对象调用方法获取即可) 1. stream() − 为集合创建串行流。 2. parallelStream() − 为集合创建并行流。 以后如果数据量大,且业务复杂,用并行,数据量少且业务简单,用串行。 因为,并行分支fork和join合并也需要很多时间 4. 常用方法: 1. void forEach(Consumer<? super T> action) 对此流的每个元素执行操作。 返回值是void,只能放在流的最后一位 public interface Consumer<T>是一个函数式接口 使用方式,lambda,表示接受一个参数,并且处理完后没有返回值。 void accept(T t) 对给定的参数执行此操作。 2. <R> Stream<R> map(Function<? super T,? extends R> mapper) map方法,取出每一个元素操作(运算....) Function接口中方法: R apply(T t) 3. long count()获取当前元素个数 4. Stream<T> limit(long maxSize) 获取一个元素个数是maxSize个的Stream对象 5. Stream<T> sorted() 元素必须是实现Comparable接口 返回根据自然顺序排序的流,。 Stream<T> sorted(Comparator<? super T> comparator) 返回根据定制顺序排序的流,。 6. 将Stream流中的元素进行聚合操作 <R,A> R collect(Collector<? super T,A,R> collector) 获取一个Collector实现类对象方式:通过Collectors工具类中的方法 将Stream流转换为集合对象 static <T> Collector<T,?,List<T>> toList() 将流中的元素放到一个List集合 将Stream流中元素按照字符串 拼接 static Collector<CharSequence,?,String> joining(CharSequence delimiter) 例如: List<T> list = collect(Collectors.toList());将流中 的元素再转换为集合 7. Stream<T> distinct() 将流中元素去重,不保证顺序 8. Stream<T> filter(Predicate<? super T> predicate) 将流中的元素按照指定的业务过滤,返回满足条件的流对象 public interface Predicate<T>是函数式接口, 抽象:boolean test(T t)
-
Optional(了解)
Optional类:
1.概念: 可能包含或不包含非空值的容器对象。
2.作用: 更好的 处理null的情况
3.常用方法:1. static <T> Optional<T> ofNullable(T value) 如果value是null,则返回一个空的 Optional 。否则返回一个带有 指定值的Optional 2. boolean isPresent() 返回 true表示存在值,否则 false表示不存在值 。 3. T orElse(T other)如果不成立则只需orElse 4. <U> Optional<U> map(Function<? super T,? extends U> mapper) 如果存在一个值,则应用提供的映射函数,如果结果不为空,则返回一个 Optional结果的 Optional 。
-
Local(了解)
Local(本地) − 简化了日期时间的处理,没有时区的问题。
Zoned(时区) − 通过指定的时区处理日期时间。
新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作
LocalDate:本地日期
LocalTime:本地时间
LocalDateTime:本地日期时间
ZonedDateTime:时区日期时间
只要为了解决:
1. 线程安全问题
2. 时间单位不统一问题
1. 先获取通过静态方法获取对应的对象
2. 调用方法
java基础第22天-jdk8新特性和lambda
猜你喜欢
转载自blog.csdn.net/weixin_45061669/article/details/104929685
今日推荐
周排行