关于Java中Stream自定义排序的问题?

题目描述

有一个List<Obj>集合。Obj中有个属性time是Date类型的,现在需要对集合排序,排序规则是:
8点~23点的数据排在前面,0~7时的数据排在后面

阅读 2k
1 个回答
public class Test {
    static class Obj {
        Date date;

        int getHour() {
            Calendar calendar = GregorianCalendar.getInstance();
            calendar.setTime(date);
            return calendar.get(Calendar.HOUR_OF_DAY);
        }
    }


    public static void main(String[] args) throws ParseException {
        List<Obj> list = new ArrayList<>();
        DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        for (int i = 0; i < 24; i++) {
            Obj obj = new Obj();
            obj.date = formatter.parse("2022-10-31 " + String.format("%02d", i) + ":12:15");
            list.add(obj);
        }

        // 方法一
        for (int i = 0; i < 8; i++) {
            for (int index = 0; index < list.size(); index++) {
                if (list.get(index).getHour() == i) {
                    Obj remove = list.remove(index);
                    list.add(remove);
                }
            }
        }

        // 方法二
        list.sort((o1, o2) -> o2.getHour() - o1.getHour());
        
        // 输出
        for (Obj obj : list) {
            System.out.println(obj.getHour());
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题