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}
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()));}
参数传一个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);}
在 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::getSex
和 Student::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 ([