按属性对对象列表进行分组

2022-08-31 08:04:42

我需要使用特定对象的属性()对对象列表()进行分组。代码如下:StudentLocation

public class Grouping {
    public static void main(String[] args) {

        List<Student> studlist = new ArrayList<Student>();
        studlist.add(new Student("1726", "John", "New York"));
        studlist.add(new Student("4321", "Max", "California"));
        studlist.add(new Student("2234", "Andrew", "Los Angeles"));
        studlist.add(new Student("5223", "Michael", "New York"));
        studlist.add(new Student("7765", "Sam", "California"));
        studlist.add(new Student("3442", "Mark", "New York"));

    }
}

class Student {
    String stud_id;
    String stud_name;
    String stud_location;

    Student(String sid, String sname, String slocation) {
        this.stud_id = sid;
        this.stud_name = sname;
        this.stud_location = slocation;
    }
}

请建议我一个干净的方式来做到这一点。


答案 1

在Java 8中:

Map<String, List<Student>> studlistGrouped =
    studlist.stream().collect(Collectors.groupingBy(w -> w.stud_location));

答案 2

这会将学生对象添加到具有作为键的哈希映射中。locationID

HashMap<Integer, List<Student>> hashMap = new HashMap<Integer, List<Student>>();

循环访问此代码并将学生添加到 :HashMap

if (!hashMap.containsKey(locationId)) {
    List<Student> list = new ArrayList<Student>();
    list.add(student);

    hashMap.put(locationId, list);
} else {
    hashMap.get(locationId).add(student);
}

如果您希望所有学生都有特定的位置详细信息,则可以使用以下方法:

hashMap.get(locationId);

这将使您获得具有相同位置ID的所有学生。