2017-05-24 50 views
0

我想知道您是否知道如何對Java中的ArrayList ArrayList進行排序。 我有一個功能,給0到1之間的分數給特定的數組。我想對ArrayList進行排序,使得得分最高的數組排在第一位。在java中對數組ArrayList進行排序

public double evaluate(int[] toEvaluate) { 
    double result = 0.0; 
    for (int i = 0; i < toEvaluate.length; i++) { 
     result += table[i][casesMap.get(toEvaluate[i])]; 
    } 
    return result/toEvaluate.length; 
} 

任何想法?

+3

Google for Comparator。 – GhostCat

回答

3

你應該用自定義Comparator一起使用Collections.sort():以上

List<Integer[]> arrays = new ArrayList<>(); 

    arrays.add(new Integer[]{1, 2}); 
    arrays.add(new Integer[]{3, 4}); 

    Collections.sort(arrays, new Comparator<Integer[]>() { 
     public int compare(Integer[] a, Integer[] b) { 
      return 1; // FIX this according to your needs 
     } 
    }); 

compare()只是一個存根,您應該根據documentation實現它。

0

你必須寫一個比較器和比較方法替代,您可以使用您的函數來計算補償值

@Override 
       public int compare(Integer[] o1, Integer[] o2) { 
       int o1Number=ratingFunction(o1) ; 
       int o2Number=ratingFunction(o2) ; 
       int cmp=o1Number.compareTo(o2Number); 
        return cmp; 
       } 
0

您可以使用比較以降序排序列表,或者您可以使用類別排序方法和然後使用反向方法,使其降序排列, 是這樣的:

List<Integer> numberList =new ArrayList<Integer>(); 
    numberList.add(3); 
    numberList.add(1); 
    numberList.add(2); 

    //before sort 
    for (Integer integer : numberList) { 
     System.out.println(integer); 
    } 

    //sorting 
    Collections.sort(numberList); 
    Collections.reverse(numberList); 

    //after sort 
    for (Integer integer : numberList) { 
     System.out.println(integer); 
    } 
0

您可能需要使用stream API爲。假設我們有評分功能(爲了舉例,我簡化了它)。現在

public static double evaluate(int[] arr){ 
    return Arrays.stream(arr).sum()/arr.length; 
} 

我們可以Comparator.comparing方法使用它:

List<int[]> list = Arrays.asList(new int[]{4, 5}, 
          new int[]{2, 3}, new int[]{0, 1}); 
List<int[]> sorted = list.stream(). 
     sorted(Comparator.comparing(Main::evaluate)). 
     collect(Collectors.toList()); 

sorted.forEach(x -> System.out.println(Arrays.toString(x))); 

的代碼背後的想法很簡單,你提供了一個比較,它定義瞭如何int[]數組進行排序。我希望這有幫助。