我编写了以下代码,以了解flatMap()以及它与.map()运算符之间的区别。根据下面发布的“代码”部分中的代码,我希望对象x的类型为String而不是type 可选的。
我指的是一个教程,它提供以下发布在“教程代码”部分中的代码。 如代码中所示,作者提供了以下代码:
String position = Optional.ofNullable(user)
flatMap(u -> u.getPosition()).orElse("default");
在我的代码中并根据它,对象“ position”应该为String类型。 阿洛斯,如果您能向我解释我何时应该从您自己的角度使用flatMap,我将不胜感激?我阅读了几篇技术文章,但仍然需要进一步说明。
我试图在Observables中将flatmap的概念模拟为可选,而不是flatmap ...但是对于我来说,在observables中的flatMap更有意义。
谢谢
链接到教程:
https://stackify.com/optional-java/
代码:
Optional<String> x = OptionalsUtils.toOptional(this.getUser_1())
.flatMap(u1 -> u1.getOptUserEmailAddress());
private User getUser_1() {
List<String> list = new ArrayList<String>(5);
list.add("foxNews");
list.add("nationalGeographic");
list.add("cnn");
User user = new User();
user.setUserName("Adam");
user.setUserEmailAddres("adam99@gmail.com");
user.setUserId(null);
user.setUserFavoritesTvList(list);
return user;
}
public Optional<String> getOptUserEmailAddress() {
return OptionalsUtils.toOptional(this.getUserEmailAddress());//.ofNullable
}
教程代码:
User user = new User("anna@gmail.com", "1234");
user.setPosition("Developer");
String position = Optional.ofNullable(user)
.flatMap(u -> u.getPosition()).orElse("default");
...
...
public class User {
private String position;
public Optional<String> getPosition() {
return Optional.ofNullable(position);
}
//...
}