I am new to Java8. In recent project I am trying Optional with map and flatmap to prevent NPE.
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));
}
}
编译错误->[无法推断flatMap(函数>)的类型参数]
查看flatmap
的签名:
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)
函数
应该返回一个可选
,因此为了使用它,您需要编写:
Optional.ofNullable(project)
.map(prjct-> prjct.getApplciationType())
.flatMap(appType1 -> Optional.ofNullable(appType1.getDirectory()))
.ifPresent(e -> System.out.println(e));
当然,在本例中使用map
更有意义(就像在第一个代码段中一样,它传递编译)。
考虑一个和方法。我想将s映射到s并获得第一个。显而易见的解决方案是使用,但要求返回一个流,而没有方法(或者它是或提供一个方法将其转换为,或将其作为)查看。 我能想出的最好的办法是: 但这似乎是一个很普通的案例,但却显得太冗长了。谁有更好的主意?
我已经编码好了: 问题是返回一个。 因此,我得到了以下信息: 方法
我知道Optionals ifPresent()调用的目的是替换空检查。从Oracle文档中提取代码示例,它在简单情况下似乎非常有用。例如: 我只是想了解为什么这被认为比空检查更好。可读性?表演在我看来,这会对项目性能造成影响,因为必须引入一个新的对象才能容纳我们最终希望获得的对象?总之,为什么这是 如果(声卡!=null),则认为比这更好。
我正在解析输入JSON。对于一个字段,有3种可能: 字段不存在; 该值设置为NULL; 该值设置为有效值。 null
有人能描述一下flatMap与compactMap的这种行为吗?compactMap不是刚刚重命名为flatMap吗?因为我发现他们表现不同 这是它打印的 有人能告诉我为什么当我使用嵌套数组不扁平吗?