Lambda表达式
是替代接口的写法,只能用于接口
()->{}
实例化接口 创建了一个LambdaEL$1的类,实现了接口
实例化LambdaEL$1的类,类会越来越多
匿名内部类 临时使用 有很多垃圾类
Lambda表达式 可以解决这个问题
Lambda表达式基于函数式编程
函数式写法 方法的参数作为自变量
所有的接口都可以实现函数式编程
可以使用函数的写法来代替接口中方法的写法
(自变量x)->(因变量y)
void say();
(x,y)->{};
例如:
new lambdaEL().sayHi(new ISpeak() {
public int say(int a,int b) {
System.out.print("helloworlld");
return 1;
}
});
用lambda表达式可以修改为:
new lambdaEL().sayHi((a,b)->{System.out.print("helloworlld");return 1;});
实例化一个接口的时候,必须将接口中的方法全部实现
函数式编程 只适用于具有一个抽象方法的接口
Lambda表达式是一个函数,跟类没有关系,所以不会产生垃圾类
可以使代码简化
但是可读性差
Lambda表达式如果参数只有一个,参数括号可以省略
Lambda表达式默认就不需要数据类型
Lambda表达式如果没有返回值,后面的大括号可以省略
如果想要把一个接口变成函数式接口,
只需要加一个注解@FunctionInterface
函数式接口只有一个抽象方法
只有一个抽象方法的接口才可以使用Lambda表达式
Lambda表达式可以用于临时定义规则
Stream流
简化开发
针对集合操作的功能 流
创建流:
Stream<Character> stream=list.stream();
使用流:
long cs=stream.filter((Character c)->{
return c.equals('a');
}).count();
stream.close();
stream给我们提供了链式操作
上一个操作的结果给下一个流
count和forEach方法为终结方法,不能使用链
假分页:
//第一页
List<String> data=new ArrayList<>();
for(int i=0;i<1000;i++)
{
data.add("张三"+i);
}
Stream<String> stream=data.stream();
stream.limit(100).forEach((String name)->
{
System.out.println(name);
});
//第二页
Stream<String> limit=data.stream().skip(100).limit(100);
limit.forEach((String name)->
{
System.out.println(name);
});
只有集合Collection的实现类和数组可以使用流,不包括map
新日期API
java.time
核心类:LocalDate
LocalDateTime
LocalTime
基本用法:
//获取当前日期
LocalDate now=LocalDate.now();
//可以代替日历类,设置一个时间,可以获得和日历类一样的信息
LocalDateTime ldt=LocalDateTime.of(2019,5,9,20,4,5);
//获取今天是今年的第几天
ldt.getDayOfYear();
//把月份加一,得到一个新的时间
ldt.plusMonths(1);
//把月份减一
ldt.minusMonths(1);
格式化:
LocalDateTime ldt=LocalDateTime.now();
//从日期转换为字符串
ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd");
//从字符串转换为日期
String date="2019-6-11T19:41:26";
LocalDateTime.parse(date);
//当使用其他格式时:
String date2="2019年6月11日";
LocalDate.parse(date2,DateTimeFormatter.ofPattern("yyyy年MM月dd日");
获取时区
获取系统默认的时区
LocalDateTime ldt=LocalDateTime.now(ZoneID.systemDefault());
//获取所有的代表性时区
ZoneID.getAvailableZoneIds();
//设置别的时区
LocalDateTime US=LocalDateTime.now(ZoneId.of("US/Central");