让我们以这个ArrayList为例[1、3、8、9、5、7、9]。
我正在获取列表中最大项目的索引,如果列表中有多个项目,则每次返回不同的索引。
我们可以看到最大的项9位于索引3和索引6。
这是我到目前为止一直在努力的事情:
public static int getIndexOfLargest( List<Integer> list ){
List<Integer> index = new ArrayList();
if ( list == null || list.size() == 0 ) return -1; // null or empty
Integer i=0, maxIndex=-1, max=null;
for (Integer x : list) {
if ((x!=null) && ((max==null) || (x>max))) {
max = x;
maxIndex = i;
}
i++;
}
return maxIndex;
}
上面的代码仅输出索引3。如何更新代码以获取索引列表[3,6]
答案 0 :(得分:2)
尝试一下:
public static List<Integer> getIndexOfLargest(List<Integer> list) {
List<Integer> indicesOfLargest = new ArrayList();
if (list == null || list.size() == 0)
return indicesOfLargest; // null or empty
Integer i = 0, max = null;
for (Integer x : list) {
if (x != null) {
if (max == null || x > max) {
indicesOfLargest.clear();
max = x;
indicesOfLargest.add(i);
} else if (x == max) {
indicesOfLargest.add(i);
}
i++;
}
}
return indicesOfLargest;
}
答案 1 :(得分:1)
您可以使用此方法:
public static List<Integer> getIndexOfLargest( List<Integer> list ){
if ( list == null || list.size() == 0 ) return new ArrayList <>( ); // null or empty
Integer i=0, max=null;
for (Integer x : list) {
if ((x!=null) && ((max==null) || (x>max))) {
max = x;
}
i++;
}
i = 0;
List<Integer> index = new ArrayList();
for(Integer r : list){
if(r == max){
index.add( i );
}
i++;
}
return index;
}
和另一个选项:
public static List<Integer> getIndexOfLargest( List<Integer> list ){
if ( list == null || list.size() == 0 )
return new ArrayList <>( ); // null or empty
return IntStream
.range( 0, list.size() )
.filter( i -> Objects.equals( list.get( i ), list.stream().max( Integer::compareTo ).get() ) )
.boxed()
.collect( Collectors.toList() );
}