Как сделать математическую операцию над атрибутами объектов? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть список объектов со значениями погоды List<Weather> weatherList = new ArrayList();

, в списке у меня есть два объекта:

{
    "latitude": 13.699444,
    "longitude": 12.676667,
    "timezone": "",
    "daily": {
        "data": [
            {
                "time": 1586037600,
                "sunriseTime": 1586059620,
                "sunsetTime": 1586107860,
                "moonPhase": 0.41,
                "temperatureHigh": 8.36,
                "temperatureHighError": 3.58,
                "temperatureLow": 3.72,

            }
        ]
    },
    "offset": 2
}

и

{
    "latitude": 11.699444,
    "longitude": 10.676667,
    "timezone": "",
    "daily": {
        "data": [
            {
                "time": 1586037600,
                "sunriseTime": 1586059620,
                "sunsetTime": 1586107860,
                "moonPhase": 0.41,
                "temperatureHigh": 12.36,
                "temperatureHighError": 6.58,
                "temperatureLow": 3.72,

            }
        ]
    },
    "offset": 2
}

Конечно, я есть все добытчики и сеттеры. Мне нужно подобрать этот объект, который имеет большее значение (TemperatureHigh / TemperatureLow) / 2. Я пытался

Double resultNumber;
for(Weather weather:  weatherList){
     resultNumber = ((weather.getDaily().getData().get(0).getTemperatureLow()/weather.getDaily().getData().get(0).getTemperatureHigh())/2);
//and here I got result for only one object
}

Как мне это сделать? Должен ли я добавить, скажем, Map<resultNumber,WeatherObject>? и получить мою ценность? Или есть возможность использовать здесь потоки и лямбды?

1 Ответ

1 голос
/ 10 марта 2020

Вы можете просто объявить другую переменную, которая хранит текущее значение (TemperatureHigh / TemperatureLow) / 2. Затем вы сравниваете его с resultNumber, который вы сохранили. Если это временное число больше, вы обновляете resultNumber и resultWeather до текущего значения и погоды.

Double temp;
Double resultNumber; 
Weather resultWeather; 
for(Weather weather:  weatherList){
    temp = ((weather.getDaily().getData().get(0).getTemperatureLow()/weather.getDaily().getData().get(0).getTemperatureHigh())/2);
    if(resultNumber == null || Double.compare(resultNumber,temp) < 0) {
        resultNumber = temp;
        resultWeather = weather;
    }
}
//at this point resultWeather holds the weather with the highest value

Или, если в weatherList есть только две погоды, вы можете просто сделать оператор if else, который сравнивает значение двух погод и сохраняет погоду с большим значением в другом погодном объекте.

double value1 = weatherList.get(0).(the operation to get the value for the first weather);
double value2 = weatherList.get(1).(the operation to get the value for the other weather);
Weather resultWeather;
if(value1 > value2){
    resultWeather = weatherList.get(0);
}
else{
    resultWeather = weatherList.get(1);
}
//at this point resultWeather holds the weather with the higher value of the two


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...