Java List 分组:根据相同数据将不同标签以逗号分割生成新列表
可以使用 Java 8 的 Stream API 来实现对 List 进行分组和生成新的 List。
假设我们有一个 Student 类,其中包含 name 和 label 两个属性,我们需要根据 label 进行分组,并将相同 label 对应的 name 以','分割生成一个新的 List。
首先,我们需要导入相关的包:
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
然后,定义 Student 类:
class Student {
private String name;
private String label;
public Student(String name, String label) {
this.name = name;
this.label = label;
}
public String getName() {
return name;
}
public String getLabel() {
return label;
}
}
接下来,我们可以使用 Stream API 对 List 进行分组和生成新的 List:
public class Main {
public static void main(String[] args) {
// 创建一个包含 Student 对象的 List
List<Student> students = new ArrayList<>();
students.add(new Student('Alice', 'A'));
students.add(new Student('Bob', 'B'));
students.add(new Student('Cindy', 'A'));
students.add(new Student('David', 'B'));
students.add(new Student('Emily', 'C'));
students.add(new Student('Frank', 'A'));
// 根据 label 进行分组
Map<String, List<Student>> groupedStudents = students.stream()
.collect(Collectors.groupingBy(Student::getLabel));
// 将相同 label 对应的 name 以','分割生成新的 List
List<String> newList = groupedStudents.values().stream()
.map(group -> String.join(',', group.stream()
.map(Student::getName)
.collect(Collectors.toList())))
.collect(Collectors.toList());
// 输出新的 List
System.out.println(newList);
}
}
运行以上代码,输出结果为:
[Alice,Cindy,Frank,Bob,David,Emily]
注意:生成的新 List 的顺序可能与原 List 中元素的顺序不一致,这是因为 Stream API 使用了并行处理的方式。如果需要保持顺序,可以使用LinkedHashMap来替代HashMap,或者使用Collectors.toMap方法,并指定LinkedHashMap作为其参数。
原文地址: https://www.cveoy.top/t/topic/qjLm 著作权归作者所有。请勿转载和采集!