Java 8 按属性区分

java

1个回答

写回答

冒菜

2025-07-10 00:28

+ 关注

Java
Java

Java 8 按属性区分

在Java 8中,我们可以通过使用Collectors.groupingBy方法按照对象的属性将其分组。这使得我们能够更轻松地对一组对象进行分类和处理。本文将介绍如何使用Java 8中的Collectors.groupingBy方法按照对象的属性进行分组,并提供一些案例代码来帮助理解。

按年龄分组

首先,让我们以一个简单的例子开始,假设我们有一个名为Person的类,该类具有name和age两个属性。我们希望按照人的年龄将它们分组。

Java

class 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>类型的对象,其中键是年龄,值是具有相同年龄的人的列表。这使得我们可以根据年龄轻松地对人进行分组。

按性别分组

除了按年龄分组,我们还可以按照其他属性来分组。让我们以性别为例,演示如何按照人的性别将其分组。

Java

enum 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岁的人为例,演示如何按照该条件将人分组。

Java

class 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都提供了简洁的解决方案。通过本文提供的案例代码,希望读者能更好地理解并运用这一特性。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号