当前位置: 首页 > 知识库问答 >
问题:

java Lambda表达式如何按条件动态传入方法引用?

鲁淇
2023-10-19

java中如何按条件传入分组
例如有个学生类集合,如何动态传入一个方法引用来分组?

list.stream().collect(Collectors.groupingBy(Student::getSex));list.stream().collect(Collectors.groupingBy(Student::getAge));
public List<Student> test(动态传入){// ...listlist.stream().collect(Collectors.groupingBy(动态传入));return list}

共有3个答案

祁修诚
2023-10-19
public static List<Student> groupBy(List<Student> list, Function<Student, ?> dynamicReference) {    Map<?, List<Student>> groupedStudents = list.stream()        .collect(Collectors.groupingBy(dynamicReference));    return groupedStudents.values().stream()            .flatMap(Collection::stream)            .collect(Collectors.toList());}public static void main(String[] args) {    List<Student> students = Arrays.asList(            new Student("Alice", "female", 20),            new Student("Bob", "male", 22),            new Student("Charlie", "male", 23),            new Student("Alice", "female", 21),            new Student("Bob", "male", 22)    );    List<Student> groupedBySex = groupBy(students, Student::getSex);    List<Student> groupedByAge = groupBy(students, Student::getAge);    System.out.println(Arrays.toString(groupedBySex.toArray()));    System.out.println(Arrays.toString(groupedByAge.toArray()));}
晋西岭
2023-10-19

参数传一个Function,代码如下

public static Map<String, List<Student>> process(Function<Student, String> function) {    List<Student> studentList = new ArrayList<>();    Map<String, List<Student>> map = studentList.stream().collect(Collectors.groupingBy(function));    return map;}public static void main(String[] args) {    Map<String, List<Student>> map=process(Student::getName);}
彭礼骞
2023-10-19

在 Java 中,你可以通过使用方法引用和 Lambda 表达式来按条件动态传入方法引用以进行分组。在你的示例中,你需要将某个方法作为参数传递给 Collectors.groupingBy()。这可以通过使用 Function 接口来实现。

下面是一个示例代码,展示了如何通过动态传入方法引用进行分组:

import java.util.*;import java.util.stream.Collectors;class Student {    private String name;    private String sex;    private int age;    // constructor, getters, setters...    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}public class Main {    public static void main(String[] args) {        List<Student> students = new ArrayList<>();        // add some students...        // 使用 lambda 表达式动态传入方法引用进行分组        Map<String, List<Student>> groupedBySex = students.stream()            .collect(Collectors.groupingBy(Student::getSex));        Map<Integer, List<Student>> groupedByAge = students.stream()            .collect(Collectors.groupingBy(Student::getAge));        // 输出结果        System.out.println(groupedBySex);        System.out.println(groupedByAge);    }}

在这个示例中,我们创建了一个 Student 类,它有一些属性(例如姓名、性别和年龄)。然后,我们使用 Collectors.groupingBy() 方法根据性别和年龄对学生列表进行分组。我们通过使用方法引用 Student::getSexStudent::getAge 来动态传递要进行分组的属性。

 类似资料:
  • New in Django 1.8. 条件表达式允许你在过滤器、注解、聚合和更新操作中使用 if ... elif ... else的逻辑。条件表达式为表中的每一行计算一系列的条件,并且返回匹配到的结果表达式。条件表达式也可以像其它 表达式一样混合和嵌套。 条件表达式类 我们会在后面的例子中使用下面的模型: from django.db import models class Client(m

  • IntelliJ一直建议我用方法引用替换我的lambda表达式。 两者之间有什么客观差异吗?

  • 当需要根据表达式,而不是参数的值或数量进行匹配时,条件表达式(Guards)就显得非常有用。如果你熟悉函数式编程的话,对条件表达式也不会陌生。 为了尽可能地接近CSS的语言结构,Less使用关键字 when 而不是 if/else来实现条件判断,因为 when 已经在CSS的 @media query 特性中被定义。 表达式中可以使用比较运算符、逻辑运算符、或检查函数来进行条件判断。 1、比较运算

  • 好像内容有点太多了不方便阅读,总结一下: 项目信息: RuoYi-Vue2 前后端分离版本 Vue 2.6.12 VueCLI 4x Webpack 4x Node v16.15.1 npm 8.11.0 使用阿里镜像 项目使用 () => import(@/views/${view}) 的方式动态引入页面组件。 正常情况下 npm run build 项目可以正确分析并预载入 @/views 目

  • 使用DynamoDB,我知道我可以指定一个条件表达式来控制更新,例如,使用来防止覆盖现有的项。然而,有没有办法检查这个结果呢?也就是说,如果确实有一个现有的项目,并且创建失败,我想知道这一点,这样我就可以在我的HTTP响应中返回一个错误代码。然而,查看Boto3中的留档,默认情况下put_item不返回任何内容,所以我不确定如何监控操作的成功。有人找到方法了吗?

  • 尤达表达式 不要使用尤达表达式。尤达表达式是指,拿一个常量去和变量比较而不是拿变量去和常量比较。它就像是在表达 “蓝色是不是天空的颜色” 或者 “高个是不是这个男人的属性” 而不是 “天空是不是蓝的” 或者 “这个男人是不是高个子的” (译者注:名字起源于星球大战中尤达大师的讲话方式,总是用倒装的语序) 推荐: if ([myValue isEqual:@42]) { ... 不推荐: if ([