JAVA学习-行为抽象和Lambda.分组

时间:2024-04-27 07:24:54

       Java中的行为抽象和Lambda表达式是指可以作为方法参数传递的代码块,用于在调用方法时动态地定义方法的行为。Lambda表达式使得能够更加简洁地实现行为抽象。

一、行为抽象:

- 行为抽象指的是将方法或者功能抽象出来,进行封装,以便在调用时能够根据实际情况动态地实现不同的行为。
- 在Java中,行为抽象常常使用接口或者抽象类来实现,可以通过匿名内部类或者Lambda表达式来传递行为。

二、Lambda表达式:

- Lambda表达式是Java 8引入的一种函数式编程特性,可以理解为匿名函数的一种简化形式。
- Lambda表达式省略了传统匿名内部类的繁琐语法,能够更加简洁地实现行为抽象和匿名函数的定义。
- Lambda表达式使用箭头符号"->"将参数和函数体分隔开,可以接受多个参数并指定函数体。

三、Lambda表达式和行为抽象的常见应用场景包括:

- 作为参数传递给方法,比如在集合的排序、过滤等方法中使用Lambda表达式指定比较规则、条件判断等;
- 作为线程的任务代码,可以通过Lambda表达式简化线程的使用;
- 作为事件处理代码,比如在GUI编程中处理按钮点击、菜单选择等事件。

Java中的行为抽象和Lambda表达式有许多内置的函数式接口,比如Consumer、Supplier、Function等,在实际应用中可以根据需要进行选择,或者自定义函数式接口。

以分组为例,Java中提供了Collectors.groupingBy方法用于对集合进行分组。下面是一个简单的示例代码,对学生对象列表按照年龄分组:

import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
                new Student("Tom", 18),
                new Student("Alice", 20),
                new Student("Bob", 18),
                new Student("Jenny", 20)
        );

        Map<Integer, List<Student>> groupedByAge = students.stream()
                .collect(Collectors.groupingBy(Student::getAge));

        System.out.println(groupedByAge);
    }
}

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

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

       以上代码通过Stream API的collect方法和Collectors.groupingBy方法对学生列表按照年龄进行分组,返回一个Map,其中key为年龄,value为对应年龄的学生列表。这是Lambda表达式和行为抽象在集合分组中的典型应用。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)