使用 Vavr List.distinctBy

Using Vavr List.distinctBy

我想使用 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>

嗯,List.distinctByio.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是一个纯函数)。