我有一些存储在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)来直接获取数字?
答案 0 :(得分:2)
您可以执行类似我在下面显示的代码。您迭代第一个数组,计算最大值并相应地更新第二个数组。请注意,您需要一个额外的数组来存储间隔。
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);
}
}
}
答案 1 :(得分:1)
使用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]
答案 2 :(得分:0)
确定。所以你要比较的列表大小可能会有所不同,在这种情况下,要建立一个数组列表来比较数字List<?> list = Arrays.asList( numbersToCompare )
;
然后Collections.max( list )
,列表应该包含可以比较的对象,换句话说需要具有可比性。 (如果不写自己的比较器)