使用从Vavr List.distinctBy创建的流返回的distinctBy时出现未定义方法错误

问题描述 投票:0回答:1

我想使用

List.distinctBy
来过滤 Vavr 提供的列表。

我在 pom.xml 中添加了此依赖项

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

但是当我在代码中使用它时

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

我有一个编译错误:

Stream 类型未定义distinctBy(MenuPriceByDay::getUpdateLocalDate) 方法

java collections java-stream vavr
1个回答
1
投票

好吧,

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
是纯函数)。

© www.soinside.com 2019 - 2024. All rights reserved.