java中list进行分组根据相同的数据将不同的label以分割生成一个新的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作为其参数
原文地址: http://www.cveoy.top/t/topic/iC6H 著作权归作者所有。请勿转载和采集!