Lambda表达式特点:
- 简洁性:省去了繁琐的方法声明和匿名内部类的写法,使得代码更加紧凑。
- 非侵入性:不需要修改现有的接口或类,可以直接在现有的函数式接口上使用 Lambda 表达式。
- 可读性:将重点放在了核心逻辑上,减少了冗余代码,使得程序更易于理解和维护。
- 函数式编程:支持函数式编程思想,可以以函数作为参数传递,支持闭包操作。
语法:
(形参列表) -> {方法体};
注意:
当一个接口或一个抽象类只有一个抽方法时才可使用
当重写的方法中有形参,此时可以忽略形参的数据类型不写
当重写的方法中有形参,并且只有一个参数,此时可以忽略小括号不写
当方法体中只有一行代码时,可以忽略大括号不写
当方法体中只有一行代码,并且该代码是用于返回值,此时必须省略return不写
当形参的数据使用final修饰,此时不能省略数据类型不写
方法引用:
在lambda表达式的基础上再次优化
语法
对象::实例方法
类::静态方法
类::实例方法
类::new
Stream工作流
使用步骤:
1.创建流:
可以由多种方式来创建(集合,数组,Stream.of()方法,Stream.iterate() 或 Stream.generate() )
2.中间操作:
中间操作是对流进行处理和转换的操作,可以有多个中间操作,每个中间操作都会返回一个新的流。常见的中间操作包括:
- filter():过滤流中的元素。
- map():对流中的元素进行映射转换。
- distinct():去除流中的重复元素。
- sorted():对流中的元素进行排序。
- limit():限制流中元素的数量。
- skip():跳过流中的前几个元素。
- flatMap():将流中的每个元素转换为流,并将其扁平化为一个流。
3.终止操作:
终止操作是对流进行最终处理的操作,只能有一个终止操作,执行终止操作后,流将不再可用。常见的终止操作包括:
- forEach():对流中的每个元素执行指定的操作。
- collect():将流中的元素收集到一个集合或结果容器中。
- reduce():利用指定的操作将流中的元素进行归约,返回归约结果。
- count():返回流中的元素数量。
- min()、max():返回流中的最小值或最大值。
新时间API
LocalDate
LocalDateTime
作用:代替Date
方法:
now():获取当前时间,静态方法
of():获取指定时间,静态方法
getYear():获取年
getMonthValue():获取月
getDayOfMonth():获取日
plusXXX():添加
minusXXX():减少
atZone(ZoneId zoneId):将时间转换为指定时区的时间
format(DateTimeFormatter dtf):将时间转换为指定格式的字符串
parse(CharSequence text, DateTimeFormatter formatter):将指定格式的字符串转换为时间
代码:
//1创建本地时间
LocalDateTime localDateTime=LocalDateTime.now();
//LocalDateTime localDateTime2=LocalDateTime.of(year, month, dayOfMonth, hour, minute)
System.out.println(localDateTime);
System.out.println(localDateTime.getYear());
System.out.println(localDateTime.getMonthValue());
System.out.println(localDateTime.getDayOfMonth());//2添加两天
LocalDateTime localDateTime2 = localDateTime.plusDays(2);
System.out.println(localDateTime2);//3减少一个月
LocalDateTime localDateTime3 = localDateTime.minusMonths(1);
System.out.println(localDateTime3);
DateTimeFormatter
作用:代替SimpleDateFormat
方法:
ofPattern("时间格式"):设定时间格式
代码:
DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyyMMdd");
ExecutorService pool = Executors.newFixedThreadPool(10);
Callable<LocalDate> callable=new Callable<LocalDate>() {
@Override
public LocalDate call() throws Exception {
return LocalDate.parse("20200525",dtf);
}
};
List<Future<LocalDate>> list=new ArrayList<>();
for(int i=0;i<10;i++) {
Future<LocalDate> future=pool.submit(callable);
list.add(future);
}
for (Future<LocalDate> future : list) {
System.out.println(future.get());
}
pool.shutdown();ZoneId:时区
方法:
public static Set<String> getAvailableZoneIds():获取所有时区
public static ZoneId systemDefault():获取系统默认时区Instant:时间戳
方法:
public static Instant now():获取当前时间
public long toEpochMilli():获取当前时间与1970年1月1日00:00:00:000的时间差,单位毫秒
public Instant plusSeconds(long secondsToAdd):减数当前时间的秒数时间转换:
Date --->Instant---->LocalDateTime
代码:
Date date=new Date();
Instant instant = date.toInstant();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
LocalDateTime --->Instant---->Date
代码:
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
Date from = Date.from(instant);
System.out.println(from);