2014-09-24 41 views
-1

嗨我想基於該對象的值排序對象。最初我使用了進行排序的TreeMap,但有一些非唯一鍵被刪除,因此無法使用。我搜索了一下,並遇到了番石榴MultiMap。但是,我怎樣才能真正使用它來對值進行排序呢?如何使用多圖對對象進行排序?

基本上我試圖根據diffYTD_percentage值對預算信息進行排序。謝謝!

Multimap<Double, BudgetInformation> multiMap = ArrayListMultimap.create(); 
    for (Budget budget : budgets) { 
     BudgetInformation budgetInfo = getBudget(budget.getId()); 
     double actualToDate = budgetInfo.getActualToDate(); 
     double budgetToDate = budgetInfo.getTotalBudgetToDate(); 
     double diffYTD_value = budgetToDate - actualToDate; 
     double diffYTD_percentage_value = 0.0; 
     if (budgetToDate != 0.0) { 
      double fraction = actualToDate/budgetToDate; 
      fraction = fraction - 1; 
      diffYTD_percentage_value = fraction * 100; 
     } 
     multiMap.put(diffYTD_percentage_value, budgetInfo); 
    } 

    Iterator<BudgetInformation> budgetIterator = multiMap.values().iterator(); 

回答

0

如何使用TreeMultiMap?它不支持重複的鍵值對。但重複鍵很好。

+0

它不會讓我把Class BudgetInformation放到TreeMultiMap中。 TreeMultiMap 不起作用。 – OneTwo 2014-09-24 10:52:34

+0

如果你打開該鏈接,你會發現它說'類TreeMultimap '關鍵和價值是泛型。它可以是雙倍,長等 – 2014-09-24 10:59:59

+0

那麼我該如何使用它來對BudgetInformation進行排序? – OneTwo 2014-09-24 11:05:30

2

使用樹爲了排序收集是錯誤的方法。在Java中有專門的實用程序方法來排序列表,Collections.sort(List<T extends Comparable<? super T>> list)Collections.sort(List<T> list, Comparator<? super T> c)。第一個用於對元素進行自然排序的列表進行排序(基本上實現接口),當需要使用自定義排序對元素進行排序時,後者用於類似自己的情況。

所以,基本上你需要做的是創造Comparator將比較基於diffYTD_percentage_value 2個BusinessInfo實例並調用Collections.sort與此比較。

Comparator<BudgetInformation> budgetInfoCmp = new Comparator<BudgetInformation>() { 
     private double getDiffYTDPercentage(BudgetInformation budgetInfo) { 
      double actualToDate = budgetInfo.getActualToDate(); 
      double budgetToDate = budgetInfo.getTotalBudgetToDate(); 
      double diffYTDValue = budgetToDate - actualToDate; 
      double diffYTDPercentageValue = 0.0; 
      if (budgetToDate != 0.0) { 
       double fraction = actualToDate/budgetToDate; 
       fraction = fraction - 1; 
       diffYTDPercentageValue = fraction * 100; 
      } 
      return diffYTDPercentageValue; 
     } 

     @Override 
     public int compare(BudgetInformation o1, BudgetInformation o2) { 
      return Double.compare(getDiffYTDPercentage(o1), getDiffYTDPercentage(o2)); 
     } 
    }; 

    List<BudgetInformation> budgetInformationsToSort = getBudgetInformations(); 
    Collections.sort(budgetInformationsToSort, budgetInfoCmp); 

也儘量避免使用下劃線在變量命名,如under Java naming convention變量名應該是駱駝。

相關問題