jdk8 list先按条件1排序,同条件的再按一个条件排序
时间: 2024-02-11 09:04:01 浏览: 100
好的,您可以使用Java 8中的Stream API和Comparator来实现这个功能。这是一个例子:
假设您有一个名为`Person`的类,它有两个属性`age`和`name`,您想首先按`age`属性排序,然后按`name`属性排序,您可以这样做:
```
List<Person> people = ... // 获取人员列表
List<Person> sortedPeople = people.stream()
.sorted(Comparator.comparing(Person::getAge).thenComparing(Person::getName))
.collect(Collectors.toList());
```
这将返回一个新的已排序的人员列表,首先按`age`属性排序,然后按`name`属性排序。
相关问题
jdk8 list stream 多条件分组排序
可以使用Java 8中的Stream API来实现多条件分组排序。以下是示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 创建示例数据
List<Person> persons = Arrays.asList(
new Person("Alice", 30, "New York"),
new Person("Bob", 25, "London"),
new Person("Charlie", 35, "New York"),
new Person("David", 20, "Paris"),
new Person("Eva", 28, "London")
);
// 按城市分组,然后按年龄和姓名排序
Map<String, List<Person>> result = persons.stream()
.sorted(Comparator.comparing(Person::getAge).thenComparing(Person::getName))
.collect(Collectors.groupingBy(Person::getCity));
// 打印结果
result.forEach((city, people) -> {
System.out.println(city);
people.forEach(System.out::println);
System.out.println();
});
}
}
class Person {
private String name;
private int age;
private String city;
public Person(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getCity() {
return city;
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
```
输出结果为:
```
London
Bob (25)
Eva (28)
New York
Alice (30)
Charlie (35)
Paris
David (20)
```
在示例中,我们首先使用`sorted`方法按年龄和姓名排序,然后使用`groupingBy`方法按城市分组。最后,我们打印结果,城市和人员列表分别输出。
jdk8 list stream 多条件先分组再组内排序
可以使用Java 8中的Stream API来实现多条件先分组再组内排序。以下是示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 创建示例数据
List<Person> persons = Arrays.asList(
new Person("Alice", 30, "New York"),
new Person("Bob", 25, "London"),
new Person("Charlie", 35, "New York"),
new Person("David", 20, "Paris"),
new Person("Eva", 28, "London"),
new Person("Frank", 35, "New York")
);
// 先按城市分组,再按年龄和姓名排序
Map<String, List<Person>> result = persons.stream()
.sorted(Comparator.comparing(Person::getAge).thenComparing(Person::getName))
.collect(Collectors.groupingBy(Person::getCity, LinkedHashMap::new, Collectors.toList()));
// 打印结果
result.forEach((city, people) -> {
System.out.println(city);
people.forEach(System.out::println);
System.out.println();
});
}
}
class Person {
private String name;
private int age;
private String city;
public Person(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getCity() {
return city;
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
```
输出结果为:
```
New York
Charlie (35)
Frank (35)
Alice (30)
London
Bob (25)
Eva (28)
Paris
David (20)
```
在示例中,我们首先使用`sorted`方法按年龄和姓名排序,然后使用`groupingBy`方法按城市分组,并使用`LinkedHashMap`保留插入顺序,最后使用`toList`收集组内元素到列表中。最终,我们打印结果,城市和人员列表分别输出。
阅读全文