可以使用 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作为其参数。

Java List 分组:根据相同数据将不同标签以逗号分割生成新列表

原文地址: https://www.cveoy.top/t/topic/qjLm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录