在Java中排序月份会返回正确的顺序

时间:2016-08-31 05:12:19

标签: sorting

我想整理几个月,并且只会在图表中显示6个月的数据。 数据将是 [2016年10月,2016年11月,2016年12月,2016年1月,2016年2月,2016年3月]。

1 个答案:

答案 0 :(得分:-1)

使用Java 8及更高版本中内置的YearMonth类。它代表一年零一个月,并且知道如何在实施compareTo Comparable方法后进行排序。

您可以使用SortedMap收集数据,每个YearMonth作为关键字,将数据集合收集为Map值。

YearMonth start = YearMonth.of( 2016 , 10 );  // Months numbered 1-12 for January-December.
YearMonth stop = start.plusMonths( 7 );  // Half-Open approach, beginning is inclusive while ending is exclusive.

SortedMap< YearMonth , List<MyData> > ymToDataMap = new TreeMap<>();
…
YearMonth ym = YearMonth.of( 2016 , 10 ) ;
MyData myData = … ;
ymToDataMap.put( ym , myData ) ;

添加YearMonth作为键时,会自动为您保留时间顺序。您可以循环此SortedMap以导出某些图表库的数据。您可以将月份名称导出为字符串。

通过以下方式生成字符串:

  • toString对象
  • 上调用YearMonth
  • 在提取的getYear对象上的YearMonthgetDisplayName中调用MonthString output = ym.getMonth().getDisplayName( TextStyle.SHORT , Locale.US ) + " " + ym.yetYear() ;
  • 调用format方法并传递DateTimeFormatter对象。

搜索Stack Overflow以获取有关这些主题的更多信息。