如何从数组对象列表中找到max元素?

时间:2017-04-29 23:18:24

标签: java arrays arraylist

Collections.max(arraylist)不起作用,常规for循环也不起作用。

我拥有的是:

ArrayList<Forecast> forecasts = current.getForecasts();

Collections.max(forecast)给了我这个错误:

The method max(Collection<? extends T>) in the type Collections is
not applicable for the arguments (ArrayList<Forecast>)

ArrayList拥有Forecast个对象,每个对象都有一个int字段,表示每天的温度。我试图将最大值存储在int max。

5 个答案:

答案 0 :(得分:12)

由于您的ArrayList包含Forecast个对象,您需要定义max方法应如何找到ArrayList中的最大元素。

根据这一点应该有效:

ArrayList<Forecast> forecasts = new ArrayList<>();
// Forecast object which has highest temperature
Forecast element = Collections.max(forecasts, Comparator.comparingInt(Forecast::getTemperature));
// retrieve the maximum temperature
int maxTemperature = element.getTemperature();

答案 1 :(得分:1)

Streams非常适合这类问题。

Forecast highest = forecasts.stream()
                            .max((fc1, fc2) -> fc1.getTemp() - fc2.getTemp())
                            .get();

答案 2 :(得分:0)

另一个解决方案是使用map reduce:

Optional<Forecast> element = forecasts
                     .stream()
                     .reduce((a,b) -> a. getTemperature() > b.getTemperature() ? a : b );

通过这种方式,您甚至可以使用parallelStream()

答案 3 :(得分:0)

这是从arraylist

返回最大值的简单方法

公共静态对象GetMaxValue(ArrayList arrayList)

{

static $validates_uniqueness_of = array(
      array('username')
 );

}

答案 4 :(得分:-1)

我有两个想法。首先,您在参数中使用了forecast,但它应该是forecasts。此外,您从未提供类Forecast的代码。我可能错了,因为我没有看到您的所有代码,但您需要将预测转换为Integer。通过Integer i = Integer.parseInt(forecasts);执行此操作。接下来使用Collections.max(i)