If-оператор в потоке - PullRequest
       4

If-оператор в потоке

0 голосов
/ 13 марта 2020

Можно ли использовать условие if в моей карте ниже?

public Map<LocalDate, Double> avarageTemperatures(LocalDate dateFrom, LocalDate dateTo) {

    Map<LocalDate, Double> tempAverage = Data.stream()
            .collect(Collectors.groupingBy(Weather::getDateTime,
                    Collectors.averagingDouble(Weather::getTemp)));

    System.out.println("average: " + tempAverage);
    return tempAverage;
}

Я хочу вернуть только даты и tempAverage для дат от datefrom до dateTo, что является вводом пользователем. Поэтому я хотел бы реализовать оператор if, например

for (Weather weather : Data){
    if(!weather.getDateTime().isAfter(dateTo) && !weather.getDateTime().isBefore(dateFrom)){}
}

, где weatherData - это ArrayList, содержащий даты и температуры. Мой класс погоды:

public class Weather {
    private LocalDate dateTime;
    private LocalTime time;
    private double temperature;
    private String tag;
    //setter, getter, constructor 
}

Даты имеют форму 1946-01-15, а температура формы -0,3.

1 Ответ

6 голосов
/ 13 марта 2020

Вы можете использовать filter():

weatherData.stream().filter(weather -> !weather.getDateTime().isAfter(dateTo) &&
                                    !weather.getDateTime().isBefore(dateFrom))...
...