1. Lambda表达式。
2. 接口中新的成员。
3. 方法引用。
4. stream流
lambda表达式
匿名内部类: 可以直接创建接口的类对象。
package demo01;
/**
* @program: JDK8
* @description:
* @author: 阿木
* @create: 2022-02-14 08:36
**/
public class Test01 {
public static void main(String[] args) {
USB usb=new Upan(); //如果该对象只使用一次。为了这一次 你必须创建一个该接口的实现类。
usb.show();
USB usb1=new USB() { //匿名内部类。
@Override
public void show() {
System.out.println("匿名内部类");
}
};
usb1.show();
}
}
interface USB{
public void show();
}
class Upan implements USB{
@Override
public void show() {
System.out.println("U盘");
}
}
需求:
package demo01;
/**
* @program: JDK8
* @description:
* @author: 阿木
* @create: 2022-02-14 08:40
**/
public class Test02 {
public static void main(String[] args) {
Runnable r1=new Runnable() {
@Override
public void run() {
System.out.println("Hello");
}
};
Thread t1=new Thread();//可以使用任务对象的构造函数Runnable
t1.start();
}
}
分析代码:
Thread类需要一个Runnable接口作为参数,其中的抽象方法run方法是用来指定线程任务内容的核心
为了指定run方法体,不得不需要Runnable的实现类
为了省去定义一个Runnable 的实现类,不得不使用匿名内部类
必须覆盖重写抽象的run方法,所有的方法名称,方法参数,方法返回值不得不都重写一遍,而且不能出错,
而实际上,我们只在乎方法体中的代码
我们可以使语法更加简介,可以使用lambda表达式。
lambda表达式的语法
接口名 对象名=(参数名,参数名….)->{方法体}
lambda表达式由三部分
1.左侧 参数列表()
2.运算符 ->
3.右侧 {方法体}
public static void main(String[] args) {
// Runnable r1=new Runnable() {
// @Override
// public void run() {
// System.out.println("Hello");
// }
// };
Runnable r1=()->{
System.out.println("lambda表达式");
};
Thread t1=new Thread(r1);//可以使用任务对象的构造函数Runnable
t1.start();
}
lambda表达式使用的前提:
方法的参数类型为接口类型。
接口中有且仅有一个抽象方法。函数式接口@FunctionInterface
package demo01;
/**
* @program: JDK8
* @description:
* @author: 阿木
* @create: 2022-02-14 08:52
**/
public class Test03 {
public static void main(String[] args) {
// MyIn myIn=(b)->System.out.println("我的年龄=="+b);
// fun(myIn);
MyIn2 myIn2=(a)->{
return "我的身高:"+a;
};
fun2(myIn2);
}
//传递的接口参数有参有返回值
public static void fun2(MyIn2 myIn2){
String show = myIn2.show(175);
System.out.println(show);
}
public static void fun(MyIn myIn){
myIn.info(15);
}
}
interface MyIn{
public void info(int a);
}
interface MyIn2{
public String show(int a);
}
注意: 如果方法体中有且仅有一条语句,那么可以省略{} 如果这条语句为return 那么可以省略return.
package demo01;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* @program: JDK8
* @description:
* @author: 阿木
* @create: 2022-02-14 09:22
**/
public class Test04 {
public static void main(String[] args) {
List<Student> list=new ArrayList<>();
list.add(new Student("张三",18));
list.add(new Student("李四",16));
list.add(new Student("王二",19));
list.add(new Student("麻子",17));
System.out.println(list);
//对集合中的元素按照年龄排序
// Comparator<Student> comparator=new Comparator<Student>() {
// @Override
// public int compare(Student o1, Student o2) {
// return o1.getAge()-o2.getAge();
// }
// };
Comparator<Student> comparator=(o1,o2)->o1.getAge()-o2.getAge();
Collections.sort(list,comparator);
System.out.println("排序后的结果===================");
System.out.println(list);
}
}
class Student{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
版权声明:本文为qq_61587842原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。