学习内容
- Lambda表达式
- 局部内部类中变量的修饰符
- 默认方法 static default
- Date API
- 流
Lambda表达式
简化书写
格式:(该方法的传参)->{该方法体具体执行内容}
- 案例:创建接口,定义求两个整数和方法,创建接口的子类对象,完成求10+20的和。
MathDemo md = new SonMath();
int sum = md.sum(10, 20);
System.out.println(sum);
MathDemo md = new MathDemo() {
public int sum(int a, int b) {
return a+b;
}
};
int sum = md.sum(10, 20);
System.out.println(sum);
使用Lambda表达式书写,省去了接口的实现类,只有是函数式接口(只有一个抽象方法的接口),才能使用Lambda表达式替换。
MathDemo md2 = (int a, int b)->{return a+b;};
int sum2 = md2.sum(1,2);
System.out.peintln(sum2);
- 省略小括号
theString t = new Son();
t.peintString("sss");
当形参列表是一个的时候,可以省略小括号。
theString t = message -> System.out.println(message);
t.printString("ssss");
线程中的使用
简化线程的书写。
//基本版
Thread t = new Thread(new Runnable() {
@override
public void run() {
for(int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"----"+i);
}
}
});
t.start();
//Lambda版本
Thread t2 = new Thread(() -> {
for(int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"----"+i);
}
});
t2.start();
forEach方法在集合中的使用
//使用forEach方法+Lambda表达式,完成对集合的遍历
list.forEach((s2)->System.out.println(s2));
System.out.printlb("========");
集合的排序
直接将compareTo简化为Lambda的形式比较两个参数。
//在jdk1.8之后,List集合出现了自己的排序方法default void sort(Comparator<? super E> c)
list.sort((o1,o2)->o1.compareTo(o2));
System.out.println(":::"+list);
局部内部类中的变量的修饰符
final修饰符可省略;
内部类在访问它所在的方法中的变量时,该变量必须是常量(被final修饰的);
jdk1.8之后,省略了final修饰符,但是本质上该变量还是final。
//局部内部类
class Outer {
public void method() {
final int num = 10;//局部变量 jdk1.8新特性 final可省略
class Inner { //局部内部类
public void print() {
//num++; 是final修饰的常量
System.out.println("sss" + num);
}
}
//创建内部类对象,并调用print方法
Inner i = new Inner();
i.print();
}
}
默认方法
接口中的方法,可以用abstract/default/static修饰,修饰符不能混合使用。
interface jdk_default {
public abstract double sum(int a, int b);
//静态方法 jdk1.8
static void staticMethod() {
System.out.println("接口中的静态方法");
}
//默认方法 jdk1.8 当接口中的方法被default修饰后,实现类重写该方法,要求权限修饰符只能是public
default double sqrt(int a) {
return Math.sqrt(a);
}
}
Date API
jdk1.8新增了一些处理时间问题的专门类,在包java.time下包含了一组全新的时间日期API。
Time包下
LocalDate 代表的是 不带时间的日期 yyyyMMdd
LocalTime 代表的是 不带日期的时间 HH:mm:ss
LocalDateTime 包含了日期与时间 不过没有带时区
ZonedDateTime 包含了 日期与时间 带时区
流
定义:流是Java API的新成员,它允许我们以声明性方式处理数据集合。
Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的
Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的 Stream,用户
只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字符串的首字母”等,
Stream 会隐式地在内部进行遍历,做出相应的数据转换。
总结
学习的jdk1.8新特性。