Java8 :: flatMap 可选
Java8 :: flatMap in optional
I am new to Java8. In recent project I am trying Optional with map and flatmap to prevent NPE.
我尝试使用可选的 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>) 的类型参数]
Optional.flatMap()
的目的是从函数中解包 Optional
。
例如,如果您的 getDirectory
returns Optional<String>
,那么 .map()
调用会给您 Optional<Optional<String>>
,但是如果您使用 flatMap()
- 它只给你 Optional<String>
.
见flatMap
的签名:
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)
Function
应该是 return 和 Optional
,所以要使用它,您需要写:
Optional.ofNullable(project)
.map(prjct-> prjct.getApplciationType())
.flatMap(appType1 -> Optional.ofNullable(appType1.getDirectory()))
.ifPresent(e -> System.out.println(e));
当然,在此示例中使用 map
更有意义(如在您的第一个片段中,它通过了编译)。
I am new to Java8. In recent project I am trying Optional with map and flatmap to prevent NPE.
我尝试使用可选的 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>) 的类型参数]
Optional.flatMap()
的目的是从函数中解包 Optional
。
例如,如果您的 getDirectory
returns Optional<String>
,那么 .map()
调用会给您 Optional<Optional<String>>
,但是如果您使用 flatMap()
- 它只给你 Optional<String>
.
见flatMap
的签名:
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)
Function
应该是 return 和 Optional
,所以要使用它,您需要写:
Optional.ofNullable(project)
.map(prjct-> prjct.getApplciationType())
.flatMap(appType1 -> Optional.ofNullable(appType1.getDirectory()))
.ifPresent(e -> System.out.println(e));
当然,在此示例中使用 map
更有意义(如在您的第一个片段中,它通过了编译)。