ArookieHxzZz 2022-05-12 17:16 采纳率: 50%
浏览 168
已结题

日期排序,首先根据年排序,年份一样根据月排序

img

要求从小到大,然后只要最大日期之前的12个

比如最大的是 2021年11月 就要图片里面2021年11月之前的12个月分 (包括自己本身12月),的

  • 写回答

6条回答 默认 最新

  • 太空眼睛 Java领域新星创作者 2022-05-12 19:44
    关注

    代码如下,经过调试,完全正确:

    public class Answer7716354 {
    
        public static void main(String[] args) {
            List<String> years = new ArrayList<>();
            years.add("2017年03月");
            years.add("2017年04月");
            years.add("2017年05月");
            years.add("2017年06月");
            years.add("2017年07月");
            years.add("2017年08月");
            years.add("2017年09月");
            years.add("2017年10月");
            years.add("2020年10月");
            years.add("2020年11月");
            years.add("2020年12月");
            years.add("2021年10月");
            years.add("2021年11月");
            years.add("2021年2月");
            years.add("2021年3月");
            years.add("2021年4月");
            years.add("2021年5月");
            years.add("2021年6月");
            years.add("2021年7月");
            years.add("2021年8月");
            years.add("2021年9月");
            List<YearMonth> list = years.stream().map(YearMonth::new).sorted().collect(Collectors.toList());
            // 只要最大日期前12个
            for(int i=list.size()-12; i<list.size(); ++i) {
                System.out.println(list.get(i));
            }
        }
    
        static class YearMonth implements Comparable<YearMonth> {
            private static Pattern pattern = Pattern.compile("(\\d{4})年(\\d{1,2})月");
            private String origin;
            private int year;
            private int month;
            public YearMonth(String origin) {
                this.origin = origin;
                Matcher matcher = pattern.matcher(origin);
                if(matcher.find()) {
                    this.year = Integer.parseInt(matcher.group(1));
                    this.month = Integer.parseInt(matcher.group(2));
                }
            }
    
            @Override
            public String toString() {
                return origin;
            }
    
            /**
             * 从小到大排序
             * @param o the object to be compared.
             * @return
             */
            @Override
            public int compareTo(YearMonth o) {
                if(this.year > o.year) {
                    return 1;
                }
                if(this.year < o.year) {
                    return -1;
                }
                if(this.month>o.month) {
                    return 1;
                }
                if(this.month<o.month) {
                    return -1;
                }
                return 0;
            }
        }
    }
    

    运行结果如下:

    2020112020122021220213202142021520216202172021820219202110202111

    如有帮助,请采纳,十分感谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 5月12日

悬赏问题

  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?