Java 对列表进行排序<;对象>;基于对象内部的字符串数组

Java 对列表进行排序<;对象>;基于对象内部的字符串数组,java,sorting,Java,Sorting,我有一个对象列表,需要根据其中的字符串变量进行排序。问题是这个字符串是csv样式的,所以我需要拆分它,然后对它进行排序。字符串包含一周中的几天,需要对整个列表进行排序,因为今天是第一天,接下来的几天是下一天。我已经实现了我粘贴在下面的代码,它可以工作,但我不确定这是否是最有效的方法。非常感谢你的帮助 public class Student { private String studentDays; private String name; private int sor

我有一个对象列表,需要根据其中的字符串变量进行排序。问题是这个字符串是csv样式的,所以我需要拆分它,然后对它进行排序。字符串包含一周中的几天,需要对整个列表进行排序,因为今天是第一天,接下来的几天是下一天。我已经实现了我粘贴在下面的代码,它可以工作,但我不确定这是否是最有效的方法。非常感谢你的帮助

public class Student {
    private String studentDays;
    private String name;
    private int sortPriority;

    public String getStudentDays() {
        return studentDays;
    }

    public void setStudentDays(String studentDays) {
        this.studentDays = studentDays;
    }

    public int getSortPriority() {
        return sortPriority;
    }

    public void setSortPriority(int sortPriority) {
        this.sortPriority = sortPriority;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
这就是我所实现的

public class SortNew {
    private List<Student> students;
    private HashMap<String, Integer> dayPriorityMap = new HashMap<String, Integer>();

    public SortNew(List<Student> students) {
        this.students = students;
        generateDayMap();
    }

    public void sort() {
        for (int i = 0; i < students.size(); i++) {
            if (students.get(i).getStudentDays() != null) {
                List<String> studentBatchDays = Arrays.asList(students.get(i).getStudentDays().split(","));
                if (studentBatchDays.contains("Mon")) {
                    students.get(i).setSortPriority(dayPriorityMap.get("Mon"));
                } else if (studentBatchDays.contains("Tue")) {
                    students.get(i).setSortPriority(dayPriorityMap.get("Tue"));
                } else if (studentBatchDays.contains("Wed")) {
                    students.get(i).setSortPriority(dayPriorityMap.get("Wed"));
                } else if (studentBatchDays.contains("Thu")) {
                    students.get(i).setSortPriority(dayPriorityMap.get("Thu"));
                } else if (studentBatchDays.contains("Fri")) {
                    students.get(i).setSortPriority(dayPriorityMap.get("Fri"));
                } else if (studentBatchDays.contains("Sat")) {
                    students.get(i).setSortPriority(dayPriorityMap.get("Sat"));
                } else if (studentBatchDays.contains("Sun")) {
                    students.get(i).setSortPriority(dayPriorityMap.get("Sun"));
                }
            }
        }

        Collections.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return Integer.compare(o1.getSortPriority(), o2.getSortPriority());
            }

        });

        for (Student student : students) {
            System.out.println(student.getName());
        }
        System.out.println(dayPriorityMap.toString());
    }

    public void generateDayMap() {
        Calendar cal = Calendar.getInstance();
        for (int i = 1; i <= 7; i++) {
            if (i > 1) {
                cal.add(Calendar.DAY_OF_WEEK, 1);
            }
            int t = cal.get(Calendar.DAY_OF_WEEK);
            String day = getDay(t);
            dayPriorityMap.put(day, i);
        }
    }

    public String getDay(int day) {
        switch (day) {
        case Calendar.SUNDAY:
            return "Sun";
        case Calendar.MONDAY:
            return "Mon";
        case Calendar.TUESDAY:
            return "Tue";
        case Calendar.WEDNESDAY:
            return "Wed";
        case Calendar.THURSDAY:
            return "Thu";
        case Calendar.FRIDAY:
            return "Fri";
        case Calendar.SATURDAY:
            return "Sat";
        }
        return null;
    }

    public static void main(String[] args) {
        List<Student> students = new ArrayList<Student>();

        Student student = new Student();
        student.setName("One");
        student.setSortPriority(10);
        student.setStudentDays("Sun,Tue,Wed");
        students.add(student);

        Student student1 = new Student();
        student1.setName("Two");
        student1.setSortPriority(10);
        student1.setStudentDays("Sat,Thu,Sun");
        students.add(student1);

        Student student2 = new Student();
        student2.setName("Three");
        student2.setSortPriority(10);
        students.add(student2);

        Student student3 = new Student();
        student3.setName("Four");
        student3.setSortPriority(10);
        student3.setStudentDays("Fri,Sun,Sat");
        students.add(student3);

        SortNew s = new SortNew(students);
        s.sort();
    }
}
公共类SortNew{
私人名单学生;
private HashMap dayPriorityMap=新建HashMap();
公共SortNew(列出学生){
这个。学生=学生;
generateDayMap();
}
公共无效排序(){
对于(int i=0;i
您可以尝试使用Java 8功能风格功能,以避免重复的编码模式:

if (studentBatchDays.contains("Mon")) {
    students.get(i).setSortPriority(dayPriorityMap.get("Mon"));
} else if (studentBatchDays.contains("Tue")) {
    students.get(i).setSortPriority(dayPriorityMap.get("Tue"));
} else if (studentBatchDays.contains("Wed")) {
    students.get(i).setSortPriority(dayPriorityMap.get("Wed"));
} else if (studentBatchDays.contains("Thu")) {
    students.get(i).setSortPriority(dayPriorityMap.get("Thu"));
} else if (studentBatchDays.contains("Fri")) {
    students.get(i).setSortPriority(dayPriorityMap.get("Fri"));
} else if (studentBatchDays.contains("Sat")) {
    students.get(i).setSortPriority(dayPriorityMap.get("Sat"));
} else if (studentBatchDays.contains("Sun")) {
    students.get(i).setSortPriority(dayPriorityMap.get("Sun"));
}
您可以将消费者而不是值放入dayPriorityMap。然后遍历工作日,并在每个工作日使用消费者

大致如下:

import java.util.*;
import java.util.function.Consumer;

public class SortNew {
    private List<Student> students;
    private Map<String, Consumer<Integer>> dayPriorityMap = new HashMap<>();

    public SortNew(List<Student> students) {
        this.students = students;
        generateDayMap();
    }

    public void sort() {
        List<String> weekDays = Arrays.asList("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
        for (int i = 0; i < students.size(); i++) {
            if (students.get(i).getStudentDays() != null) {
                List<String> studentBatchDays = Arrays.asList(students.get(i).getStudentDays().split(","));
                final int studentIndex = i;
                weekDays.stream().filter(studentBatchDays::contains)
                        .findFirst()
                        .ifPresent(weekday -> dayPriorityMap.get(weekday).accept(studentIndex));
            }
        }

        students.sort(Comparator.comparingInt(Student::getSortPriority));

        for (Student student : students) {
            System.out.println(student.getName());
        }
    }

    public void generateDayMap() {
        Calendar cal = Calendar.getInstance();
        for (int i = 1; i <= 7; i++) {
            if (i > 1) {
                cal.add(Calendar.DAY_OF_WEEK, 1);
            }
            int t = cal.get(Calendar.DAY_OF_WEEK);
            String day = getDay(t);
            final int sortPrio = i;
            dayPriorityMap.put(day, (in) -> students.get(in).setSortPriority(sortPrio));
        }
    }

    private String getDay(int day) {
        switch (day) {
            case Calendar.SUNDAY:
                return "Sun";
            case Calendar.MONDAY:
                return "Mon";
            case Calendar.TUESDAY:
                return "Tue";
            case Calendar.WEDNESDAY:
                return "Wed";
            case Calendar.THURSDAY:
                return "Thu";
            case Calendar.FRIDAY:
                return "Fri";
            case Calendar.SATURDAY:
                return "Sat";
        }
        return null;
    }

    public static void main(String[] args) {
        List<Student> students = new ArrayList<Student>();

        Student student = new Student();
        student.setName("One");
        student.setSortPriority(10);
        student.setStudentDays("Sun,Tue,Wed");
        students.add(student);

        Student student1 = new Student();
        student1.setName("Two");
        student1.setSortPriority(10);
        student1.setStudentDays("Sat,Thu,Sun");
        students.add(student1);

        Student student2 = new Student();
        student2.setName("Three");
        student2.setSortPriority(10);
        students.add(student2);

        Student student3 = new Student();
        student3.setName("Four");
        student3.setSortPriority(10);
        student3.setStudentDays("Fri,Sun,Sat");
        students.add(student3);

        SortNew s = new SortNew(students);
        s.sort();
    }
}
import java.util.*;
导入java.util.function.Consumer;
公共类SortNew{
私人名单学生;
private Map dayPriorityMap=new HashMap();
公共SortNew(列出学生){
这个。学生=学生;
generateDayMap();
}
公共无效排序(){
listWeekday=Arrays.asList(“周一”、“周二”、“周三”、“周四”、“周五”、“周六”、“周日”);
对于(int i=0;idayPriorityMap.get(工作日).accept(学生索引));
}
}
排序(Comparator.comparingit(Student::getSortPriority));
用于(学生:学生){
System.out.println(student.getName());
}
}
public void generateDayMap(){
Calendar cal=Calendar.getInstance();
对于(int i=1;i 1){
cal.add(日历日/周,1);
}
int t=cal.get(日历日/周);
字符串day=getDay(t);
最终int-sortPrio=i;
dayPriorityMap.put(day,(in)->students.get(in).setSortPriority(SortPriorio));
}
}
私有字符串getDay(整数天){
开关(da