要按照同一属性进行分组,我们需要用到Java中的Collections类和Comparator接口。
- 首先,我们需要为ArrayList中的对象定义一个属性,以便按照该属性进行分组。例如,我们定义一个Person类,其中包含name和age两个属性,我们想要按照年龄进行分组。则代码如下:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
- 接下来,我们创建一个ArrayList
对象,并向其中添加若干Person实例。例如:
List<Person> persons = new ArrayList<>();
persons.add(new Person("Tom", 23));
persons.add(new Person("Jerry", 22));
persons.add(new Person("Mike", 24));
persons.add(new Person("Lucy", 23));
- 然后,我们需要实现Comparator接口,自定义比较器,以便按照年龄进行分组。代码如下:
public class AgeComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.getAge() - p2.getAge();
}
}
- 我们使用Collections.sort()方法,并将AgeComparator作为参数传递进去,对ArrayList进行排序。该方法会根据比较器的实现对List进行排序。
Collections.sort(persons, new AgeComparator());
- 最后,我们遍历List中的元素,并按照年龄进行分组。
int age = persons.get(0).getAge();
List<Person> group = new ArrayList<>();
for (Person person : persons) {
if (person.getAge() != age) {
// 打印当前分组结果
System.out.println("Age " + age + ": " + group);
// 开始新的分组
age = person.getAge();
group.clear();
}
group.add(person);
}
// 打印剩余分组结果
System.out.println("Age " + age + ": " + group);
- 示例说明:
假设现在有如下模拟数据:
List<Person> persons = new ArrayList<>();
persons.add(new Person("Tom", 23));
persons.add(new Person("Jerry", 22));
persons.add(new Person("Mike", 24));
persons.add(new Person("Lucy", 23));
persons.add(new Person("John", 24));
persons.add(new Person("Amy", 23));
persons.add(new Person("Lisa", 22));
我们想按照年龄进行分组,样例输出如下:
Age 22: [Person{name='Jerry', age=22}, Person{name='Lisa', age=22}]
Age 23: [Person{name='Tom', age=23}, Person{name='Lucy', age=23}, Person{name='Amy', age=23}]
Age 24: [Person{name='Mike', age=24}, Person{name='John', age=24}]
另外一个示例,假设现在有如下模拟数据:
List<Person> persons = new ArrayList<>();
persons.add(new Person("A", 18));
persons.add(new Person("B", 28));
persons.add(new Person("C", 18));
persons.add(new Person("D", 28));
persons.add(new Person("E", 28));
我们想按照年龄进行分组,样例输出如下:
Age 18: [Person{name='A', age=18}, Person{name='C', age=18}]
Age 28: [Person{name='B', age=28}, Person{name='D', age=28}, Person{name='E', age=28}]
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java ArrayList按照同一属性进行分组 - Python技术站