首页 > 解决方案 > Java8::flatMap 可选

问题描述

I am new to Java8. In recent project I am trying Optional with map and flatmap to prevent NPE.

我用 Optional 尝试了 map 和 flatmap ,但是当我使用 flatMap 时,编译器给出了错误。

public class Project {
    private ApplicationType applciationType;
}


@Getter
@Setter
public class ApplicationType {

    public String getDirectory() {      
        return "Inside my directory";
    }
}


public class Driver {

    public static void main(String[] args) {
        ApplicationType appType = new ApplicationType();
        Project project = new Project(appType);

         //When using map its running fine.
        Optional.ofNullable(project)
        .map(prjct-> prjct.getApplciationType())
        .map(appType1 -> appType1.getDirectory())
        .ifPresent(e -> System.out.println(e));

        //When using flatMap.. comiplation error.
        Optional.ofNullable(project)
        .map(prjct-> prjct.getApplciationType())
        .flatMap(appType1 -> appType1.getDirectory())
        .ifPresent(e -> System.out.println(e));

    }

}

抱歉,如果我在这里遗漏了一些基本的东西。只是尝试在未来的项目中学习和实现 java8 功能。

我得到的编译错误-> [无法推断 flatMap(Function>) 的类型参数]

标签: javajava-8optionalflatmap

解决方案


的目的是从功能Optional.flatMap()中解开包装。Optional

例如,如果你getDirectory返回Optional<String>,那么.map()call 会给你Optional<Optional<String>>,但如果你使用flatMap()- 它只会给你Optional<String>


推荐阅读