Использование Vavr List.distinctBy - PullRequest
0 голосов
/ 17 марта 2019

Я хочу использовать List.distinctBy для фильтрации списков, предоставленных (Javaslang). Я добавил эту зависимость в свой pom.xml

   <dependency>
<groupId>io.vavr</groupId>
<artifactId>vavr-kotlin</artifactId>
<version>0.10.0</version>

, но когда я использую его в коде

menuPriceByDayService
                .findAllOrderByUpdateDate(menu, DateUtils.semestralDate(), 26)
                .stream()
                .distinctBy(MenuPriceByDay::getUpdateLocalDate)
                .map(cp -> cp.getUpdateLocalDate())
                .sorted()
                .forEach(System.out::println);

У меня ошибка компиляции:

The method distinctBy(MenuPriceByDay::getUpdateLocalDate) is undefined for the type 
 Stream<MenuPriceByDay>

1 Ответ

0 голосов
/ 17 марта 2019

Ну, List.distinctBy - это метод на io.vavr.collection.List, и вы пытаетесь вызвать его на java.util.stream.Stream.

Вы можете использовать, например, StreamEx вместо:

StreamEx.of(
    menuPriceByDayService
        .findAllOrderByUpdateDate(menu, DateUtils.semestralDate(), 26)
        .stream())
    .distinct(MenuPriceByDay::getUpdateLocalDate)
    .map // etc

Но для этого конкретного случая вам это действительно не нужно, потому что вы выполняете map с помощью той же функции впоследствии. Так что это должно быть эквивалентно

menuPriceByDayService
    .findAllOrderByUpdateDate(menu, DateUtils.semestralDate(), 26)
    .stream()
    .map(cp -> cp.getUpdateLocalDate())
    .distinct()
    .sorted()
    .forEach(System.out::println);

(при условии, что getUpdateLocalDate - чистая функция).

...