2017-01-25 241 views
1

我目前正在編寫一個Java程序,它將值顯示到AreaChart中,並且爲此我有一個名爲dataList的ArrayList,其類型爲AreaChartPairJava - 如何避免此重複代碼

每個AreaChartPair包含一個X軸(字符串)值和一個Y軸(整數)值。

X軸是日期,Y軸是一個計數器,因爲所有數據都是從文件中讀取的,日期將是未排序的順序。我用這個功能來對它們進行排序:

dataList.sort(Comparator.comparing(AreaChartPair::getXAxisStringValue));

這是沒有完全解決我的問題,因爲它只會比前幾個字母數字字符(即02.09.2030會來01.01.2000後,因爲02自帶01後)

爲了解決這個問題,我根本扭轉的日期從dd.mm.yyyyyyyy.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

創建一個自定義的比較器,做反向比較? – RobAu

回答

5

執行排序的較短途徑是在運行中進行換向。該字符串也可以解析爲一個真正的日期對象,使其更清潔,但這需要catch塊和dateformatter對象,所以我不會在這裏編寫代碼。

dataList.sort(Comparator.comparing(AreaChartPair::getXAxisStringValue, 
    (a, b) -> { 
     return model.reverseDate(a).compareTo(model.reverseDate(b)); 
})); 
+0

工程就像一個魅力:)但我想你可能已經忘記了最後的大括號 –

+1

這只是爲了檢查你是否注意;) – Kayaman

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); 

還是重複的,雖然。如果你要在整個應用程序中反覆執行此操作,可能最有用的方法是這樣做。

+0

這可能是我的問題的有效解決方案。對我來說唯一的問題就是這一行:'.set(index,new AreaChartPair(...)',因爲新的AreaChartPair(...)將被硬編碼,是否有辦法讓這個更動態?嘗試參數化一個'對象'類型的方法,但不能創建一個新的類實例外 –