我在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
的变量中,但不知怎的,它会在第二个值之后停止迭代
答案 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>
。