
Java
Java 8 按属性区分
在Java 8中,我们可以通过使用Collectors.groupingBy方法按照对象的属性将其分组。这使得我们能够更轻松地对一组对象进行分类和处理。本文将介绍如何使用Java 8中的Collectors.groupingBy方法按照对象的属性进行分组,并提供一些案例代码来帮助理解。按年龄分组首先,让我们以一个简单的例子开始,假设我们有一个名为Person的类,该类具有name和age两个属性。我们希望按照人的年龄将它们分组。Javaclass Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // getters and setters}List<Person> people = Arrays.asList( new Person("Alice", 25), new Person("Bob", 30), new Person("Charlie", 25), new Person("Dave", 30));Map<Integer, List<Person>> peopleByAge = people.stream() .collect(Collectors.groupingBy(Person::getAge));System.out.println(peopleByAge);以上代码将输出:{25=[Person{name='Alice', age=25}, Person{name='Charlie', age=25}], 30=[Person{name='Bob', age=30}, Person{name='Dave', age=30}]}我们可以看到,peopleByAge是一个Map> 类型的对象,其中键是年龄,值是具有相同年龄的人的列表。这使得我们可以根据年龄轻松地对人进行分组。按性别分组除了按年龄分组,我们还可以按照其他属性来分组。让我们以性别为例,演示如何按照人的性别将其分组。Javaenum Gender { MALE, FEMALE}class Person { private String name; private int age; private Gender gender; public Person(String name, int age, Gender gender) { this.name = name; this.age = age; this.gender = gender; } // getters and setters}List<Person> people = Arrays.asList( new Person("Alice", 25, Gender.FEMALE), new Person("Bob", 30, Gender.MALE), new Person("Charlie", 25, Gender.MALE), new Person("Dave", 30, Gender.MALE));Map<Gender, List<Person>> peopleByGender = people.stream() .collect(Collectors.groupingBy(Person::getGender));System.out.println(peopleByGender);以上代码将输出:{MALE=[Person{name='Bob', age=30, gender=MALE}, Person{name='Charlie', age=25, gender=MALE}, Person{name='Dave', age=30, gender=MALE}], FEMALE=[Person{name='Alice', age=25, gender=FEMALE}]}我们可以看到,peopleByGender是一个Map> 类型的对象,其中键是性别,值是具有相同性别的人的列表。这使得我们可以根据性别轻松地对人进行分组。按条件分组除了按照固定的属性进行分组外,我们还可以根据满足特定条件的属性值将对象分组。让我们以年龄大于30岁的人为例,演示如何按照该条件将人分组。Javaclass Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // getters and setters}List<Person> people = Arrays.asList( new Person("Alice", 25), new Person("Bob", 30), new Person("Charlie", 35), new Person("Dave", 40));Map<Boolean, List<Person>> peopleByAgeGreaterThan30 = people.stream() .collect(Collectors.partitioningBy(person -> person.getAge() > 30));System.out.println(peopleByAgeGreaterThan30);以上代码将输出:{false=[Person{name='Alice', age=25}, Person{name='Bob', age=30}], true=[Person{name='Charlie', age=35}, Person{name='Dave', age=40}]}我们可以看到,peopleByAgeGreaterThan30是一个Map> 类型的对象,其中键是一个布尔值,代表了年龄是否大于30岁,值是满足该条件的人的列表。这使得我们可以根据特定条件轻松地对人进行分组。在Java 8中,使用Collectors.groupingBy方法按照对象的属性进行分组变得更加简单。我们可以根据属性的不同来轻松地对一组对象进行分类和处理。无论是按年龄、性别还是其他条件进行分组,Java 8都提供了简洁的解决方案。通过本文提供的案例代码,希望读者能更好地理解并运用这一特性。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号