当前位置: 首页>前端>正文

java lambda collector

Java Lambda 表达式和Collector

Java 8中引入了Lambda表达式和Stream API,使得对集合数据的操作变得更加灵活和简洁。除了Lambda表达式和Stream API外,Java 8还引入了Collector接口,可以实现对Stream的汇总操作。在本文中,我们将介绍Java中的Lambda表达式和Collector,以及如何结合它们来对集合数据进行汇总操作。

Lambda 表达式

Lambda 表达式是一个匿名函数,可以将方法作为参数传递给其他方法。Lambda 表达式的基本语法为:(参数列表) -> {表达式}。例如,下面是一个Lambda表达式的例子:

Runnable runnable = () -> {
    System.out.println("Hello, Lambda!");
};

在这个例子中,() -> {System.out.println("Hello, Lambda!");}是一个Lambda表达式,它没有参数,执行的操作是打印出"Hello, Lambda!"。

Stream API

Stream API 是Java 8中引入的用于对集合数据进行流式操作的API。Stream API提供了一种更加简洁和函数式的方式来处理集合数据,例如过滤、映射、排序等操作。下面是一个使用Stream API进行过滤操作的例子:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

List<Integer> evenNumbers = numbers.stream()
                                    .filter(n -> n % 2 == 0)
                                    .collect(Collectors.toList());

System.out.println(evenNumbers); // 输出 [2, 4, 6, 8, 10]

在这个例子中,我们使用stream()方法将集合数据转换为Stream,然后使用filter()方法对偶数进行过滤,最后使用collect()方法将结果收集为一个List。

Collector 接口

Collector 接口是Java 8中定义的用于汇总Stream数据的接口。Collector接口定义了对Stream数据进行收集、分组、聚合等操作的方法。在使用Collector时,通常会调用Collectors类中提供的静态方法来获取Collector实例。下面是一个使用Collector对集合数据进行分组操作的例子:

List<String> names = Arrays.asList("Alice", "Bob", "Cathy", "David", "Emily", "Frank");

Map<Integer, List<String>> groupedNames = names.stream()
                                               .collect(Collectors.groupingBy(String::length));

System.out.println(groupedNames); // 输出 {3=[Bob], 4=[Alice, Cathy, Emily, Frank], 5=[David]}

在这个例子中,我们使用groupingBy()方法对字符串集合进行分组,按照字符串的长度进行分组,最后将结果收集为一个Map。

综合应用

下面是一个综合应用的例子,我们从一个学生列表中筛选出成绩大于80分的学生,并按照性别进行分组:

class Student {
    private String name;
    private int score;
    private String gender;

    // 省略构造方法和getter/setter
}

List<Student> students = Arrays.asList(
    new Student("Alice", 85, "female"),
    new Student("Bob", 75, "male"),
    new Student("Cathy", 90, "female"),
    new Student("David", 80, "male"),
    new Student("Emily", 95, "female")
);

Map<String, List<Student>> groupedStudents = students.stream()
    .filter(s -> s.getScore() > 80)
    .collect(Collectors.groupingBy(Student::getGender));

System.out.println(groupedStudents);

在这个例子中,我们定义了一个Student类,包含name、score和gender属性,然后从学生列表中筛选出成绩大于80分的学生,并按照性别进行分组。

流程图

flowchart TD;
    Start --> InputData;
    InputData --> LambdaExpression;
    LambdaExpression --> StreamAPI;
    StreamAPI --> CollectorInterface;
    CollectorInterface --> End;

饼状图

pie
    title 分数统计
    "80分以下" : 20
    "80-90分" : 30
    "90分以上" : 50

在本文中,我们介绍了Java中的Lambda表达式和Collector接口,以及如何结合它们来对集


https://www.xamrdz.com/web/2n21960129.html

相关文章: