Java 8 Optional和flatMap-有什么问题? [英] Java 8 Optional and flatMap - what is wrong?

查看:78
本文介绍了Java 8 Optional和flatMap-有什么问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一些代码:

public class Player {
    Team team;
    String name;
}

public class Team {
    List<Player> players;
}

public class Demo {

    @Inject
    TeamDAO teamDAO;

    @Inject
    PlayerDAO playerDAO;

    List<String> findTeamMatesNames(String playerName) {
        Optional<Player> player = Optional.ofNullable(playerDAO.get(playerName));

        return player.flatMap(p -> teamDAO.findPlayers(p.team))
            .map(p -> p.name)
            .orElse(Collections.emptyList());
    }
}

为什么我不能这样做?在flatMap方法中,出现错误类型不匹配:无法从列表转换为可选"

Why am I not able to do this? In flatMap method I am getting error "Type mismatch: cannot convert from List to Optional"

我的目标是:

  1. 如果存在可选内容,我想基于此可选对象属性获取项目列表

  1. If optional is present I want to get list of items based on this optional object property

如果不存在可选参数,我想返回空列表

If optional is not present I want to return empty list

推荐答案

您可以使用map执行所需的操作.如果Optional为空,则不会执行map操作,但再次留空为Optional.之后,您可以提供后备值:

You can use map to perform the desired operation. The map operation will not take place if the Optional is empty but leave again an empty Optional. You can provide the fallback value afterwards:

player.map(p -> teamDAO.findPlayers(p.team)).orElse(Collections.emptyList())

Optional无法执行从PlayerList到播放器名称StringList的映射;这是一个Stream任务:

The mapping from a List of Player to a List of Player’s name Strings can’t be performed by an Optional; that’s a Stream task:

Optional<Player> player = Optional.ofNullable(playerDAO.get(playerName));
return player.map(p -> teamDAO.findPlayers(p.team)
                           .stream().map(tp -> tp.name).collect(Collectors.toList()))
             .orElse(Collections.emptyList());

这篇关于Java 8 Optional和flatMap-有什么问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆