java 数组对象多条件进行分组
时间: 2023-09-19 10:09:02 浏览: 98
JAVA 对象数组按照多个属性进行排序
可以使用Java 8中新增的Stream API来实现数组对象多条件进行分组。具体步骤如下:
1. 将数组转换成Stream对象。
2. 使用Collectors.groupingBy()方法进行分组,其中参数为一个Function对象,用于指定分组的条件。
3. 如果需要多条件分组,可以使用Collectors.groupingBy()方法的重载版本,并将多个Function对象作为参数传入即可。
以下是一个示例代码,假设我们有一个Person类,包含name、age、gender等属性:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Person[] persons = {
new Person("Tom", 20, Gender.MALE),
new Person("Lucy", 18, Gender.FEMALE),
new Person("Lily", 20, Gender.FEMALE),
new Person("Jack", 22, Gender.MALE),
new Person("Mike", 18, Gender.MALE),
new Person("Mary", 22, Gender.FEMALE)
};
// 按照年龄分组
Map<Integer, List<Person>> ageGroups = Arrays.stream(persons)
.collect(Collectors.groupingBy(Person::getAge));
System.out.println("按照年龄分组:");
System.out.println(ageGroups);
// 按照性别和年龄分组
Map<Gender, Map<Integer, List<Person>>> genderAgeGroups = Arrays.stream(persons)
.collect(Collectors.groupingBy(Person::getGender, Collectors.groupingBy(Person::getAge)));
System.out.println("按照性别和年龄分组:");
System.out.println(genderAgeGroups);
}
}
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;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public Gender getGender() {
return gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
}
enum Gender {
MALE, FEMALE
}
```
运行结果如下:
```
按照年龄分组:
{18=[Person{name='Lucy', age=18, gender=FEMALE}, Person{name='Mike', age=18, gender=MALE}], 20=[Person{name='Tom', age=20, gender=MALE}, Person{name='Lily', age=20, gender=FEMALE}], 22=[Person{name='Jack', age=22, gender=MALE}, Person{name='Mary', age=22, gender=FEMALE}]}
按照性别和年龄分组:
{FEMALE={18=[Person{name='Lucy', age=18, gender=FEMALE}], 20=[Person{name='Lily', age=20, gender=FEMALE}]}, MALE={20=[Person{name='Tom', age=20, gender=MALE}], 22=[Person{name='Jack', age=22, gender=MALE}], 18=[Person{name='Mike', age=18, gender=MALE}]}}
```
可以看到,按照年龄分组得到了一个Map对象,其中key为年龄,value为年龄相同的Person对象列表。按照性别和年龄分组得到了一个嵌套的Map对象,其中第一层的key为性别,第二层的key为年龄,value为性别和年龄都相同的Person对象列表。
阅读全文