ArrayList中最大项目的索引

时间:2019-06-16 13:14:11

标签: java arraylist

让我们以这个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]

2 个答案:

答案 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() );

}