簡體   English   中英

arraylist部分的最大值?

[英]max value from arraylist part?

我有一些存儲在ArrayList1中的int值(想象一個有一列的表)。 我需要創建另一個ArrayList2(第二列),它將具有值,即ArrayList1中范圍的最大值,例如最后3個值。 例如:

1 null
2 null
1 2
3 3
2 3
1 3

因此,secondt列 - ArrayList2將為ArrayList1中最后3個對應行的每行包含最大值。 (與xls相同,B3 = MAX(A1:A3)...)。 我可以通過為每個行創建一個循環來查找最大值,或者我可以循環創建subArrayList並使用collections.max,但這兩個解決方案都需要每行一個循環,這不是很實用,有沒有更簡單的方法? 像arrayList.max(1,3)這樣的東西可以立即獲得數字?

您可以執行類似我在下面顯示的代碼。 您迭代第一個數組,計算最大值並相應地更新第二個數組。 請注意,您需要一個額外的數組來存儲間隔。

private void m1(List<Integer> array1, List<Integer> array2, int range) {

    Integer[] rangeArray = new Integer[range];

    //Iterate first array

    for(int i = 0; i < array1.size(); i++) {

        Integer x = array1.get(i);

        rangeArray[i%range] = x;

        //Update second array

        if(i < range - 1) {
            array2.add(null);
        }
        else {
            int max = Collections.max(Arrays.asList(rangeArray));
            array2.add(max);
        }
    }
}

使用Collections.max

    int startFrom = 2; // configurable number
    List<Integer> intList = Arrays.asList(1,2,1,3,2,1,4);
    List<Integer> sortedList =  new ArrayList<>();
    for (int i = 0; i < intList.size(); i++) {
        if(i < startFrom){
            sortedList.add(null);
            continue;
        }
        ArrayList<Integer> list = new ArrayList<Integer>(intList.subList(i -startFrom, i+1));
        sortedList.add(Collections.max(list));
    }
    System.out.println(sortedList);

輸出為: [null, null, 2, 3, 3, 3, 4]

好。 所以你要比較的列表大小可能會有所不同,在這種情況下,要比較數字中的數組列表,比如說List<?> list = Arrays.asList( numbersToCompare ) ; 然后是Collections.max( list ) ,該列表應該包含可以比較的對象,換句話說需要具有可比性。 (如果不寫自己的比較器)

暫無
暫無

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

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