在Java中,你可以使用Java 8引入的Stream API来对集合进行分组和排序。以下是一个示例代码,展示了如何对一个`List
```java
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
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;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class GroupSortExample {
public static void main(String[] args) {
List
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 30),
new Person("David", 25),
new Person("Eve", 20)
);
// 按照age分组,并按照name排序,取每个分组的第一个值
Map
.collect(Collectors.groupingBy(Person::getAge,
Collectors.collectingAndThen(Collectors.toList(), list -> {
list.sort(Comparator.comparing(Person::getName));
return list.get(0);
})));
groupedSortedPeople.forEach((age, person) -> System.out.println("Age: " + age + ", Name: " + person));
}
}
在这个示例中,我们首先创建了一个`Person`类,然后创建了一个`Person`对象的列表。我们使用`stream()`方法将列表转换为一个流,然后使用`collect()`方法结合`Collectors.groupingBy()`和`Collectors.collectingAndThen()`来对`Person`对象进行分组和排序。`groupingBy()`方法根据`age`属性进行分组,而`collectingAndThen()`方法则用于在分组后对每个分组内的`Person`对象按照`name`属性进行排序,并取每个分组的第一个值。