java-函数式编程-Lambda表达式
·
函数式编程
此“函数”类似数学中的函数,只要输入的数据一致,返回的结果也一致。
函数式编程解决了什么问题?
使用Lambda函数替代某些匿名内部类对象,让程序代码更整洁,可读性更好
Lambda表达式

注意
Lambda表达式只能替代函数式接口的匿名内部类
什么是函数式接口
有且仅有一个抽象方法的接口
public class test {
//认识lambda表达式
public static void main(String[] args) {
animal a = new animal() {
@Override
public void shout() {
System.out.println("喵喵喵");
}
};
a.shout();
//错误的示范:lambda不能简化全部的匿名内部类,lambda只能简化函数式接口的匿名内部类
/*animal a1 = () -> {
System.out.println("喵喵喵");
};
a1.shout();*/
swim s = () -> {
System.out.println("开始游泳");
};
s.swimming();
}
}
abstract class animal{
public abstract void shout();
}
//函数式接口:函数接口,只有一个抽象方法
@FunctionalInterface //声明函数式接口的注解
interface swim{
void swimming();
}
Lambda表达式简化comparator接口的匿名内部类
Lambda表达式的省略规则
- 参数类型全部可以省略不写
- 若只有一个参数,参数类型省略的同时“()”也可以省略,但多个参数不能省略“()”
- 若Lambda表达式中只有一行代码,大括号可以不写,同时要省略分号“;”,若这行代码是return语句,也要去掉return
public class test {
public static void main(String[] args) {
test1();
test2();
}
public static void test1(){
Student[] students = new Student[6];
students[0] = new Student("小王", 18, 180.5, '男');
students[1] = new Student("小张", 25, 180.5, '男');
students[2] = new Student("小李", 17, 170.5, '男');
students[3] = new Student("小赵", 20, 165.5, '女');
students[4] = new Student("小王", 19, 182.5, '男');
students[5] = new Student("小周", 35, 170.5, '女');
//需求:按年龄升序排序,可以调用sun公司写好的API直接对数组进行排序
/*Arrays.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();//按照年龄升序
}
});*/
/*Arrays.sort(students, (Student o1, Student o2) -> {
return o1.getAge() - o2.getAge();//按照年龄升序
});*/
/*Arrays.sort(students, (o1, o2) -> {
return o1.getAge() - o2.getAge();//按照年龄升序
});*/
Arrays.sort(students, (o1, o2) -> o1.getAge() - o2.getAge());
for (int i = 0; i < students.length; i++) {
Student s = students[i];
System.out.println(s);
}
}
public static void test2(){
//匿名内部类的使用场景
//需求:创建一个登陆窗口,窗口上只有一个登录按钮
JFrame jf = new JFrame("登陆窗口");
jf.setSize(400, 300);
jf.setLocationRelativeTo(null);//居中
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出程序
JPanel panel = new JPanel();
jf.add(panel);
JButton btn = new JButton("登录");
panel.add(btn);
//java要求必须给这个按钮添加一个点击事件监听器对象,这就可以监听用户的点击操作
//开发中不是我们要写匿名内部类,而是用别人的功能的时候,别人允许让我们写一个匿名内部类,我们才会写。
/*btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("点击了登录按钮");
}
});*/
//btn.addActionListener(e -> System.out.println("点击了登录按钮"));
/*btn.addActionListener((ActionEvent e) -> {
System.out.println("点击了登录按钮");
});*/
/*btn.addActionListener((e) -> {
System.out.println("点击了登录按钮");
});*/
/*btn.addActionListener(e -> {
System.out.println("点击了登录按钮");
});*/
btn.addActionListener(e -> System.out.println("点击了登录按钮"));
jf.setVisible(true);
}
}
更多推荐
所有评论(0)