Java使用lamda将List元素按照某个属性指定的顺序排序

2023-05-15 263点热度 0人点赞 0条评论

需求说明

已知一个数组,需要将这个数组排序,排序的规则是:按照数组中的元素的某个属性,按照指定的顺序来排序

例如:一个包含Student的学生数组,Student中有一个分组的属性,我们要按照分组,且按照我们指定的顺序来排序

实现

实现方式是试用indexOf查找这个属性在给定的顺序数组中的位置,根据未知的大小来排序,示例如下:

public static void main(String[] args) throws Exception {
    List<Student> students = new ArrayList<>();
    students.add(new Student("张三", "超人组"));
    students.add(new Student("李四", "蜘蛛侠组"));
    students.add(new Student("王五", "钢铁侠组"));

    List<String> specificGroups = List.of("蜘蛛侠组", "钢铁侠组", "超人组"); // 按照这个特定的顺序来排序
    students.sort(Comparator.comparingInt(o -> specificGroups.contains(o.getGroup()) ? specificGroups.indexOf(o.getGroup()) : Integer.MAX_VALUE));
}

static class Student {
    private String name;
    private String group;
    public Student(String name, String group) {
        this.name = name;
        this.group = group;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }
}

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论