2017-05-24 30 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[]数组进行排序。我希望这有帮助。