要求从小到大,然后只要最大日期之前的12个
比如最大的是 2021年11月 就要图片里面2021年11月之前的12个月分 (包括自己本身12月),的
比如最大的是 2021年11月 就要图片里面2021年11月之前的12个月分 (包括自己本身12月),的
代码如下,经过调试,完全正确:
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;
}
}
}
运行结果如下:
2020年11月
2020年12月
2021年2月
2021年3月
2021年4月
2021年5月
2021年6月
2021年7月
2021年8月
2021年9月
2021年10月
2021年11月
如有帮助,请采纳,十分感谢!