Java 8 Lambda 表达式
Java 8 以前,若我们想要把某些功能传递给某个方法,总要去写匿名类.
Lambda 表达式是一个匿名函数,我们可以把 lambda 表达式理解为一段 可以传递的代码(将代码段像数据一样传递)。使用它可以写出更简洁, 更灵 活的代码。作为一种更紧凑的代码风格,使 java 语言的表达式能力得到的提升。 Lambda 表达式的本质只是一个**“语法糖”**,由编译器推断并帮你转换包装为 常规的代码,因此你可以使用更少的代码来实现同样的功能。
案例1:
package com.ff.javaforword.lambda;
import java.sql.Array;
import java.util.Arrays;
import java.util.Comparator;
public class Demo {
public static void main(String[] args) {
//默认为升序
/*String [] arr = {"d","b","a","c"};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));*/
//创建一个外部类调用
/*String [] arr = {"d","b","a","c"};
Arrays.sort(arr,new StringCom());
System.out.println(Arrays.toString(arr));*/
//创建一个内部类
/* String [] arr = {"d","b","a","c"};
Arrays.sort(arr,new StringCom1());
System.out.println(Arrays.toString(arr));*/
//创建接口的匿名内部类对象,简化写法
String [] arr = {"d","b","a","c"};
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
System.out.println(Arrays.toString(arr));
}
//内部类,不需要在外部创建类
/* private static class StringCom1 implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
}*/
}
package com.ff.javaforword.lambda;
import java.util.Comparator;
//自定义String排序规则
public class StringCom implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
}
案例2:
package com.ff.javaforword.lambda;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
public class Demo1 {
/*
lambda 语法 (参数)->{函数体}
是匿名函数,一般在方法的参数为接口时代替之前的匿名内部类
(a,b)参数可以不写.可以根据类型自己推断
他是怎样推断的呢?
要求接口中只有一个抽象方法
*/
public static void main(String[] args) {
/* String []array={"d","b","a","c"};
Arrays.sort(array,((o1, o2) -> {return o2.compareTo(o1);}));
System.out.println(Arrays.toString(array));*/
JButton jButton= new JButton("按钮");
/* jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});*/
/*jButton.addActionListener((e -> {
System.out.println("aaaaaaaa");
}));*/
//匿名内部类方式
/*
new Thread(new Runnable() {
@Override
public void run() {
}
});*/
new Thread(()->{
System.out.println("llll");
});
}
}