Есть на входе не сортированный по дате список
List<UserMeal> mealList = Arrays.asList(new UserMeal(LocalDateTime.of(2015, Month.MAY, 30, 10, 0), "Завтрак", 500), ...);
Как оптимально взять из списка все значения, соответствующие одному году?
взять из списка все значения, соответствующие одному году можно например так:
import java.util.*;
import java.util.stream.*;
import java.util.function.*;
public class UserMealFilter {
//для отфильтрованного списка
private List<UserMeal> filteredMeal = new ArrayList<>();
public List<UserMeal> filterByYear(List<UserMeal> inputList, int targetYear) {
//получаем стрим из List
Stream<UserMeal> mealListStream = inputList.stream();
//лямбда для фильтрации
Predicate<UserMeal> filter = userMeal -> userMeal.getDateTime().getYear()==targetYear;
//лямбда для сохранения
Consumer<UserMeal> consumer = userMeal -> filteredMeal.add(userMeal);
//сама фильтрация
mealListStream.filter(filter)
.forEach(consumer);
return filteredMeal;
}
}
Вызывать так
UserMealFilter userMealFilter = new UserMealFilter();
List<UserMeal> filteredMeal = userMealFilter.filterByYear(mealList, 2015);
А если вам сортировать надо, то это совсем другая история (смотрите интерфейс Comparator и Comparable)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости