Работа с Predicate

255
14 апреля 2022, 22:50

У меня есть задача, нужно сделать фильтры для стримов с разными типами объектов.

Была идея сделать что-то типо такого:

private static <T> Predicate<? super CategoryStatisticsDto> byDateTo(Date dateTo) {
    return t -> t.getPurchaseDate() != null && dateTo.after(t.getPurchaseDate());
}
private static <T> Predicate<? super Basket> byDateTo(Date dateTo) {
    return t -> t.getPurchaseDate() != null && dateTo.after(t.getPurchaseDate());
}

то есть делать фильтр а предикат бы выбирался исходя из того какой тип объекта в стриме

stream = stream.filter((Predicate<? super T>) byDateTo(searchParams.getDateTo()));

но что-то пошло не так, а точнее фильтры имеют одинаковую сигнатуру и следовательно не могут быть скомпилированы :)

method <T>byDateTo(Date) is already defined in class SearchUtil
where T is a type-variable:
T extends Object declared in method <T>byDateTo(Date)

Хотя для одного типа объектов всё компилируется и классно работает

Answer 1

У вас проблема в том, что после стирания типов у вас остается 2 метода, с одинаковыми названиями: byDateTo, а в java, как известно, нельзя создавать 2 метода с одинаковыми именами. Соответственно, чтобы решить, нужно либо называть методы по разному, либо создать метод обертку, который в зависимости от типа данных в stream будет выбирать нужный вам предикат

READ ALSO
Не выполняется запрос к API в потоках (Threads)

Не выполняется запрос к API в потоках (Threads)

Пытаюсь сделать тест, имитация работы 2х пользователей над док-мИспользую библиотеки RestAssured и JerseyTest

98
Взаимодействие между контроллерами в JavaFX

Взаимодействие между контроллерами в JavaFX

Подскажите, пожалуйста, как правильно написать взаимодействие между двумя контроллерами

242
Как делается фронтенд для Java-приложений?

Как делается фронтенд для Java-приложений?

Я столкнулся с тем, что не понимаю, как обычно реализуется фронт для Java-приложенияУ меня есть несколько предположений о том, как это может...

275
gradle to maven

gradle to maven

Есть какой-нибудь конвертор gradle файла в maven?

161