java jdk1.8新特性 Lambda表达式 Stream流 新日期API

本文介绍了Java 1.8的重要特性,包括Lambda表达式的概念、优势和使用方式,它简化了接口的实例化,减少了匿名内部类导致的垃圾类。同时,文章探讨了Stream流的引入,如何通过链式操作进行集合处理,并强调了Stream流的适用场景。此外,还提及了新的日期API,如LocalDate、LocalDateTime和LocalTime,及其基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值