当前位置: 首页 > 知识库问答 >
问题:

lambda表达式中的错误返回类型:Model1无法转换为Model2

微生恩
2023-03-14

为什么会发生异常'lambda表达式中的ad返回类型:AuthenticatedUser无法转换为User'?如果可选为空,我只想返回此AuthenticatedUser。

  User user = new User("d","d","d");
        return s -> {
            List<User> list = new ArrayList<>(Arrays.asList(TestData.BASIC_USER_ENTITY, TestData.ADMIN_USER_ENTITY));
            return new AuthenticatedUser(
                    list.stream()
                            .filter(u -> u.getUsername().equals(s))
                            .findAny()
                            .orElseGet(() -> new AuthenticatedUser(new User()))); // Bad return type in lambda expression: AuthenticatedUser cannot be converted to User
        };

共有1个答案

唐阳飙
2023-03-14

如果我们仔细检查流上的操作,我们可以做出以下观察:

list.stream()  // produces a Stream<User>
    .filter(u -> u.getUsername().equals(s)) // still a Stream<User>
    .findAny() // produces an Optional<User>
    .orElseGet(() -> new AuthenticatedUser(new User())

传递给orElseGet(…)的lambda的返回类型 必须与可选的泛型类型的赋值兼容。在我们的例子中,可选的通用类型是用户。因此,我们可以将代码重写为:

list.stream()
    .filter(u -> u.getUsername().equals(s))
    .findAny()
    .orElseGet(User::new)
 类似资料: