首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从对象的数组列表中找到max元素?

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

Stack Overflow用户
提问于 2017-04-30 07:18:24
回答 5查看 10.3K关注 0票数 6

Collections.max(arraylist)不能工作,常规的for循环也不能工作。

我所拥有的是:

代码语言:javascript
运行
复制
ArrayList<Forecast> forecasts = current.getForecasts();

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

代码语言:javascript
运行
复制
The method max(Collection<? extends T>) in the type Collections is
not applicable for the arguments (ArrayList<Forecast>)

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-04-30 07:30:12

由于ArrayList包含Forecast对象,因此需要定义max方法如何在ArrayList中查找最大元素。

类似这样的事情应该会奏效:

代码语言:javascript
运行
复制
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();
票数 19
EN

Stack Overflow用户

发布于 2017-04-30 07:48:59

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

代码语言:javascript
运行
复制
Optional<Forecast> element = forecasts
                     .stream()
                     .reduce((a,b) -> a.getTemperature() > b.getTemperature() ? a : b );

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

票数 1
EN

Stack Overflow用户

发布于 2017-04-30 07:54:36

Streams是解决这类问题的最佳选择。

代码语言:javascript
运行
复制
Forecast highest = forecasts.stream()
                            .max((fc1, fc2) -> fc1.getTemp() - fc2.getTemp())
                            .get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43701377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档