java8将list根据年龄分组后list中名称用逗号分隔转成map
在Java 8中,可以使用Stream API来处理集合数据,从而实现基于某个属性(如年龄)对列表进行分组,并且将分组内的某个属性(如名称)用逗号分隔后放入Map中。下面是一个示例,展示如何将一个包含Person对象的List根据年龄分组,并将每个组内的Person对象的名称用逗号分隔后存入Map中。
首先,定义一个简单的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;} }
然后,使用Java 8的Stream API来处理这个List:
import java.util.*; import java.util.function.Function; import java.util.stream.Collectors;public class Main {public static void main(String[] args) {List<Person> people = Arrays.asList(new Person("Alice", 30),new Person("Bob", 20),new Person("Charlie", 30),new Person("David", 20),new Person("Eve", 35));// 使用Collectors.groupingBy进行分组,然后使用Collectors.mapping收集每个分组的names,并使用Collectors.joining(",")将它们连接起来Map<Integer, String> groupedByName = people.stream().collect(Collectors.groupingBy(Person::getAge, // 分组依据:年龄Collectors.mapping(Person::getName, // 将Person映射为nameCollectors.joining(", ")) // 使用逗号和空格连接names));System.out.println(groupedByName);} }
这段代码首先通过stream()
方法获取people
列表的流,然后使用Collectors.groupingBy
进行分组。groupingBy
的第一个参数是一个函数,用于指定分组的键(这里是Person::getAge
),第二个参数是一个收集器,这里我们使用Collectors.mapping
来将每个分组中的Person
对象映射到它们的名称上,并且通过Collectors.joining(", ")
将这些名称用逗号和空格连接起来。最终,我们得到一个Map,其键是年龄,值是对应年龄组中所有人的名称,用逗号分隔。