Java基础-Lambda表达式、Java链式编程

一、Lambda表达式

Lambda表达式的作用是什么?

简化函数式接口的匿名内部类。

什么样的接口是函数式接口?

只有一个抽象方法的接口就是函数式接口。

示例代码:目标:认识Lambda是如何简化匿名内部类的。

java 复制代码
public class LambdaTest {
    public static void main(String[] args) {
        
        Animal a1 = new Animal() {
            @Override
            public void run() {
                System.out.println("老虎跑的贼快~~~~");
            }
        };
        a1.run();

        Swimming s1 = new Swimming() {
            @Override
            public void swim() {
                System.out.println("学生游泳贼溜~~~~");
            }
        };
        s1.swim();

        // Lambda可以简化函数式接口的匿名内部类
        // 可以上下文推断出真实的代码形式!
        Swimming s2 = () -> {
                System.out.println("老师游泳贼溜~~~~");
        };
        s2.swim();
    }
}

//接口
@FunctionalInterface
interface Swimming{// 函数式接口中有且仅有一个抽象方法
    void swim();
}

//抽象类
abstract class Animal{
    public abstract void run();
}

Lambda表达式的省略写法(进一步简化Lambda表达式的写法):

参数类型可以省略不写。

如果只有一个参数,参数类型可以省略,同时()也可以省略。

如果Lambda表达式中的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号!此时,如果这行代码是return语句,也必须去掉return不写。

示例代码:

java 复制代码
public class LambdaTest2 {
    public static void main(String[] args) {
        // 目标:掌握Lambda表达式简化常见函数式接口的匿名内部类
        double[] scores = {99.5, 90, 59.5, 78, 98, 55};
        // 需求:为每个分数加分10分。
        Arrays.setAll(scores, new IntToDoubleFunction() {
            @Override
            public double applyAsDouble(int index) {
                return scores[index] + 10;
            }
        });

        Arrays.setAll(scores, index -> scores[index] + 10 );

        System.out.println(Arrays.toString(scores));

        Student[] students = new Student[4]; // students = [null, null, null, null]
        //                                                   0     1     2     3
        students[0] = new Student("周芷若", 21, '女', 169.3);
        students[1] = new Student("殷素素", 38, '女', 172.2);
        students[2] = new Student("小昭", 19, '女', 168.5);
        students[3] = new Student("张无忌", 23, '男', 183.5);

        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return Double.compare(o1.getHeight(), o2.getHeight());
            }
        });

        Arrays.sort(students, (o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()));

        System.out.println(Arrays.toString(students));
    }
}
java 复制代码
public class Student implements Comparable<Student>{

    private String name;
    private int age;
    private char gender;
    private double height;

    public Student() {
    }

    public Student(String name, int age, char gender, double height) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.height = height;
    }

    // 指定大小规则
    // 比较者:this
    // 被比较者:o
    @Override
    public int compareTo(Student o) {
        /**
         * 官方规定:
         * 如果您认为左边大于右边,请返回正整数。
         * 如果您认为左边小于右边,请返回负整数。
         * 如果您认为左边等于右边,请返回0。
         * 只要这么干,默认就是升序排序
         */
        //return this.age - o.age; // 升序。
        return o.age - this.age; // 降序。
    }


    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", height=" + height +
                '}' + "\n";
    }


}

二、Java链式编程

实现了链式调用模式,通过返回当前对象实现方法链式调用。

通过构造函数初始化初始值,支持链式操作。

示例代码:

java 复制代码
public class ChainableTest {

        private int value;

        public ChainableTest(int initialValue) {
            this.value = initialValue;
        }

   //加
    public ChainableTest add(int num) {
            this.value += num;
            return this;
        }
        //乘法
        public ChainableTest multiply(int num) {
            this.value *= num;
            return this;
        }
        //getvalue
        public int getValue() {
            return this.value;
        }

        public static void main(String[] args) {
            int result = new ChainableTest(5)
                    .add(3)
                    .multiply(2)
                    .getValue();
            System.out.println("Result: " + result); // 输出: Result: 16
        }

}
相关推荐
就叫_这个吧2 小时前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡2 小时前
AI 应用系统设计
java·开发语言·人工智能
城管不管2 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅2 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒2 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
最强小杰3 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
今天AI了吗4 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
TELL5214 小时前
selenium webdriver 第二次初始化的异常
开发语言·python
动词ing5 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习5 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展