[英]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.