java中list根据相同条件拼接成同一个list
时间: 2023-08-06 10:08:39 浏览: 101
可以使用 Java 8 中的 `Collectors.groupingBy()` 方法和 `Collectors.mapping()` 方法,将列表中的元素按照相同的条件分组,然后将每个分组中的元素转换成需要的类型,最后将每个分组转换成一个列表。具体实现如下:
假设要将一个 `Person` 类型的列表按照年龄分组,将每个分组中的 `Person` 对象转换成姓名的字符串列表,最终得到一个以年龄为键、姓名列表为值的 Map,可以按照如下方式实现:
```java
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> personList = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 25),
new Person("Charlie", 20),
new Person("David", 25)
);
Map<Integer, List<String>> ageToNamesMap = personList.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toList())));
System.out.println(ageToNamesMap);
```
输出结果为:
```
{20=[Alice, Charlie], 25=[Bob, David]}
```
其中,`Collectors.groupingBy()` 方法按照年龄对 `Person` 对象进行分组,得到以年龄为键、`Person` 对象列表为值的 Map,`Collectors.mapping()` 方法将每个 `Person` 对象转换成姓名的字符串,最终得到以年龄为键、姓名列表为值的 Map。
阅读全文