簡體   English   中英

在Java中對數組的ArrayList進行排序

[英]Sorting an ArrayList of arrays in java

我想知道您是否知道在Java中對數組的ArrayList進行排序的方法。 我有一個函數,可將特定數組的得分在0到1之間。 而且我想對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;
}

有任何想法嗎 ?

您應該將Collections.sort()與自定義Comparator一起使用:

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()只是一個存根,您應該根據文檔實現它,並且可以將其替換為lambda表達式。 在上面的代碼中將是: Collections.sort(arrays, (a, b) -> 1)

您必須編寫一個Comparator並比較方法重寫,您可以在其中使用函數來計算comp值

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

您可以使用比較器按降序對列表進行排序,也可以使用Collections的排序方法,然后使用反向方法使其按降序排列,如下所示:

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

您可能要為此使用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[]數組進行排序。 我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM