从Custom ArrayList获取Max值

时间:2017-04-19 16:22:40

标签: java arraylist

我在Java中编写了这个函数:

public void calculateMax(Integer year){
    Double max = hoodDataList.get(0).getPercentage();
    if(year == 2006){
        for(Integer z = 0; z < hoodDataList.size(); z ++){

            if(hoodDataList.get(z).getYear() == 2006){
                if(hoodDataList.get(z).getPercentage() > max){
                    max = hoodDataList.get(z).getPercentage();
                }
            }
        }
    }
    Toast.makeText(getActivity(), String.valueOf(max),
            Toast.LENGTH_LONG).show();
}

现在,如果我是正确的,它应该计算百分比的最大值并将其存储在一个名为max的变量中,但不知怎的,它会在第二个值之后停止迭代

3 个答案:

答案 0 :(得分:-1)

  

但不知怎的,它会在第二个值之后停止迭代。

我已经使用hoodDataList中存储的自定义类型测试了您的代码,但我似乎无法重现错误。

或者,你可以试试这个:

public void calculateMax(Integer year){
      if (year == 2006 && hoodDataList.stream().anyMatch(c -> c.getYear() == 2006))
      {
           double max = hoodDataList.stream().filter(c -> c.getYear() == 2006).
           max((c1, c2) -> Double.compare(c1.getPercentage(),c2.getPercentage())).
           get().getPercentage();
           Toast.makeText(getActivity(), String.valueOf(max),
           Toast.LENGTH_LONG).show();
      }else
      {
          //do something else
      }
}

旁注 - 如果您要使用for循环,请不要使用包装类型(Integer)作为索引器,只需使用原语{{1} } type。

答案 1 :(得分:-1)

可能与this有关?不确定,因为我希望不会导致迭代,并且max总是设置为getBytes(),但是你说它在第二次迭代后停止。

答案 2 :(得分:-1)

使用Java 8,您可以使用以下内容:

hoodDataList.stream().filter(i -> i.getYear() == 2006).mapToDouble(i -> i.getPercentage()).max().getAsDouble();

请注意,hoodDataList应为非空List,否则您可以使用OptionalDouble#orElseGet提供返回默认值的Supplier<Double>