当两个值绑定为max时,如何在ArrayList中返回max?

时间:2017-04-05 22:11:12

标签: java loops arraylist methods

到目前为止,我有这个方法,它应该找到ArrayList的最大年龄。但是,在我的数据中,我有两个值,联合最大值为58。如何从这个循环获得第二个58?第一个58的索引是1,但我需要的索引是4.我不能硬编码。

public static int maxAge (ArrayList<Integer> ages) {
        int hold = 0;
        int max = 0;
        for (int i = 0; i < ages.size(); i++) {
            if (max < ages.get(i)) {
                max = ages.get(i);
                hold = i;
            }
            else i++;       
        }
        return hold;
    }

5 个答案:

答案 0 :(得分:2)

您可以简单地将条件更改为:

if (max <= ages.get(i))

答案 1 :(得分:0)

这取决于你为什么想要其他58.如果你想返回最新的比赛,你可以向后循环。

答案 2 :(得分:0)

下面的代码将使您能够返回与列表的最大值相关联的所有索引。但是你必须在Java 8上运行它,因为它使用Lambda Expressions。

public static ArrayList<Integer> maxAge (ArrayList<Integer> ages ) {
        int max = 0;
        ArrayList<Integer> maxIndexes = new ArrayList<Integer>() ;
        for (int i = 0; i < ages.size(); i++) {
            if (max <= ages.get(i)) {
                final int finalMax = max ;
                final int finalIndex = i ;
                maxIndexes.removeIf((elt)-> finalMax < ages.get(finalIndex)) ;
                maxIndexes.add(i) ;
                max = ages.get(i) ;
            }               
        }
        return maxIndexes ;
    }

答案 3 :(得分:0)

我知道,很难看。但我会尝试编写一个功能版本。

Optional<Integer> max = ages.stream()
                            .max(Integer::compare);
if (max.isPresent()) {
  return IntStream.range(0, ages.size())
                  .mapToObj(pos -> {
                    return new int[] {pos, ages.get(pos)};
                  })
                  .filter(pair -> pair[1] == max.get())
                  .collect(Collectors.toCollection(LinkedList::new))
                  .getLast()[0];
} else
  return 0;

答案 4 :(得分:0)

有多种方法可以更改条件以符合您的描述。试试这个:

Foo