使用groupingBy收集器创建对象列表而不是映射,可以通过使用Collectors.mapping方法来实现。该方法允许我们在groupingBy收集器中指定一个转换函数,将每个元素转换为我们想要的类型。
具体步骤如下:
下面是一个示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupingByExample {
public static void main(String[] args) {
// 创建一个对象列表
List<Person> persons = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 25),
new Person("Alice", 30),
new Person("Charlie", 35)
);
// 使用groupingBy收集器创建对象列表而不是映射
Map<String, List<Person>> personMap = persons.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.mapping(person -> person, Collectors.toList())));
// 打印结果
personMap.forEach((name, list) -> {
System.out.println(name + ": " + list);
});
}
static 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类,其中包含姓名和年龄属性。然后,我们使用groupingBy收集器将Person对象按姓名分组,并使用mapping方法将每个Person对象转换为自身。最后,我们将Collectors.toList()作为第二个参数传递给mapping方法,以创建一个对象列表而不是映射。
输出结果如下:
Alice: [Person{name='Alice', age=20}, Person{name='Alice', age=30}]
Bob: [Person{name='Bob', age=25}]
Charlie: [Person{name='Charlie', age=35}]
这样,我们就成功地使用groupingBy收集器创建了一个对象列表而不是映射。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云