java 对List按照某个字段分组之后输出
时间: 2024-03-13 16:44:43 浏览: 67
可以使用Java 8的Stream API来对List按照某个字段分组后输出。假设我们有一个Student类,其中包含name和age两个字段,现在要按照age字段对Student列表进行分组。
代码如下:
```java
List<Student> students = new ArrayList<>();
//添加学生对象到列表中
Map<Integer, List<Student>> groupByAge = students.stream()
.collect(Collectors.groupingBy(Student::getAge));
groupByAge.forEach((age, list) -> {
System.out.println("Age " + age + ":");
list.forEach(student -> System.out.println(student.getName()));
});
```
这段代码将Student对象按照age字段进行分组,生成一个Map<Integer, List<Student>>类型的结果集,其中key为age值,value为对应的Student列表。我们遍历这个结果集,输出每个年龄段的学生姓名。
相关问题
Java8 List 按某字段分组
你可以使用Java 8的Stream API来对List按照某个字段进行分组。下面是一个示例代码:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
persons.add(new Person("John", 25));
persons.add(new Person("Jane", 30));
persons.add(new Person("Bob", 25));
persons.add(new Person("Alice", 30));
Map<Integer, List<Person>> groupedByAge = persons.stream()
.collect(Collectors.groupingBy(Person::getAge));
System.out.println(groupedByAge);
}
}
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 +
'}';
}
}
```
在这个例子中,我们创建了一个Person类,有name和age两个字段。我们将一些Person对象加入到List中,然后使用Stream API的`groupingBy`方法按照age字段进行分组。最后,我们打印出分组结果。
运行以上代码,输出结果如下:
```
{25=[Person{name='John', age=25}, Person{name='Bob', age=25}], 30=[Person{name='Jane', age=30}, Person{name='Alice', age=30}]}
```
可以看到,按照age字段分组后,25岁的有John和Bob,30岁的有Jane和Alice。每个年龄对应的Person对象列表被存储在一个Map中。
Stream流对list分组并按照某个字段排序
可以使用Java 8的Stream流API来对List进行分组和排序。下面是一个示例代码:
假设我们有一个Person类,其中包含姓名和年龄两个字段:
```
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;
}
}
```
现在我们有一个List<Person>,我们想要按照年龄分组,并按照姓名进行排序:
```
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 20),
new Person("David", 25),
new Person("Eva", 20)
);
Map<Integer, List<Person>> groupedByAge = people.stream()
.collect(Collectors.groupingBy(Person::getAge));
groupedByAge.forEach((age, list) -> {
System.out.println("Age " + age + ":");
list.stream()
.sorted(Comparator.comparing(Person::getName))
.forEach(person -> System.out.println(person.getName()));
});
```
输出结果为:
```
Age 20:
Charlie
Eva
Age 25:
Alice
David
Age 30:
Bob
```
首先我们使用 `Collectors.groupingBy` 方法以年龄为键来对人员进行分组,生成一个 `Map<Integer, List<Person>>`。接着我们遍历这个Map,对每个年龄段内的人员按照姓名进行排序,并输出结果。
阅读全文