collectors.groupingby non-static
时间: 2024-01-26 11:00:23 浏览: 82
深入探索Java 8的`Collectors.groupingBy()`:分组的艺术
collectors.groupingBy是java.util.stream.Collectors类中的一个静态方法,它是用于进行分组操作的。在使用这个方法时,我们需要传递一个Function参数,用于指定按照哪个属性或条件进行分组。
然而,collectors.groupingBy方法也可以与非静态的Lambda表达式一起使用。也就是说,我们可以使用一个非静态的方法来作为groupingBy方法的参数。
例如,假设我们有一个Student类,其中包含了name和age属性。我们想要根据年龄进行学生分组,但是我们希望使用一个非静态的Lambda表达式来定义分组条件。
我们可以这样做:
```
public class Student {
private String name;
private int age;
// constructors, getters, setters
// non-static lambda expression
public Predicate<Student> ageGreaterThan(int age) {
return student -> student.getAge() > age;
}
}
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("John", 20),
new Student("Mike", 22),
new Student("Sarah", 18),
new Student("Emma", 21)
);
Map<Boolean, List<Student>> groups = students.stream()
.collect(Collectors.groupingBy(Student::ageGreaterThan(20)));
System.out.println("Greater than 20: " + groups.get(true));
System.out.println("Less than or equal to 20: " + groups.get(false));
}
```
在上面的示例中,我们在Student类中定义了一个非静态的Lambda表达式ageGreaterThan,它返回一个Predicate<Student>对象。我们在groupingBy方法中使用Student::ageGreaterThan(20)来指定分组条件,即将年龄大于20的学生分为一组,将年龄小于或等于20的学生分为另一组。
这样,我们就可以使用非静态的Lambda表达式来进行分组操作,使得代码更加灵活和可读性更高。
阅读全文