我目前正在编写一个将值显示在AreaChart
中的Java程序,为此我从通用类型dataList
获得名为AreaChartPair
的ArrayList。
每个AreaChartPair
包含一个X轴(字符串)值和一个Y轴(整数)值。
X轴是日期,Y轴是计数器,因为所有数据都是从文件中读取的,所以日期将按未排序的顺序排列。为了对它们进行排序,我使用了这个函数:
dataList.sort(Comparator.comparing(AreaChartPair::getXAxisStringValue));
这并不能完全解决我的问题,因为它只会比较前几个字母数字字符(即02.09.2030
后面会01.01.2000
,因为02
位于01
之后)
要解决此问题,我只需将日期从dd.mm.yyyy
改为yyyy.mm.dd
,使用上述函数对列表进行排序,然后将字符串反转回dd.mm.yyyy
我现在的问题是如何简化这段代码,因为它是重复的:
//replaces the current data with the reversed string
for (int index = 0; index < dataList.size(); index++) {
dataList.set(index, new AreaChartPair(model.reverseDate(dataList.get(index).getXAxisStringValue()),
dataList.get(index).getYAxisIntegerValue()));
}
//sorts the data
dataList.sort(Comparator.comparing(AreaChartPair::getXAxisStringValue));
//reverses the string back to normal, so it can be displayed
for (int index = 0; index < dataList.size(); index++) {
dataList.set(index, new AreaChartPair(model.reverseDate(dataList.get(index).getXAxisStringValue()),
dataList.get(index).getYAxisIntegerValue()));
}
有什么建议吗?
答案 0 :(得分:5)
执行排序的更简单方法是即时进行反转。该字符串也可以解析为实际日期对象,以使其更清晰,但这需要catch块和dateformatter对象,所以我不会在这里编写该代码。
dataList.sort(Comparator.comparing(AreaChartPair::getXAxisStringValue,
(a, b) -> {
return model.reverseDate(a).compareTo(model.reverseDate(b));
}));
答案 1 :(得分:1)
也许用它来制造方法:
AreaChartPair areaChartPair = new AreaChartPair(model.reverseDate(dataList.get(index).getXAxisStringValue()),
dataList.get(index).getYAxisIntegerValue());
public DataListType dataListSorter(DataListType datalist, AreaChartPair areaChartPair) {
for (int index = 0; index < dataList.size(); index++) {
dataList.set(index, areaChartPair);
}
return dataList;
}
dataList = dataListSorter(dataList);
dataList.sort(Comparator.comparing(AreaChartPair::getXAxisStringValue));
dataList = dataListSorter(dataList);
但仍然重复。如果您要在整个应用程序中反复执行此操作,可能最有用的方法。