声明函数来映射值并在它们存在时使用它们是很方便的.
在你有几个强制对象和几个Optionals的情况下,我发现自己将其他包装在Optional.of(mandatoryObject)中,所以我可以在它们上使用相同的表达式而不用向后写它们.
Food vegetables = Food.someVegetables();
Optional<Food> condiment = Food.someCondiment();
Optional<Food> spices = Food.someSpices();
condiment.map(prepare).ifPresent(putOnPlate);
spices.map(prepare).ifPresent(putOnPlate);
Run Code Online (Sandbox Code Playgroud)
但后来我不喜欢这段代码:
putOnPlate.accept(prepare.apply(vegetables));
Run Code Online (Sandbox Code Playgroud)
所以我把它包起来:
Optional.of(vegetables).map(prepare).ifPresent(putOnPlate);
Run Code Online (Sandbox Code Playgroud)
但这是错误的,因为蔬菜(在这个例子中)实际上不是可选的.它们非常重要,我给大家的印象是它们是可选的.
所以我的问题是:java中有一些类如java.util.Mandatory,所以我可以写:
Mandatory.of(vegetables).map(prepare).definitelyPresentSo(putOnPlate);
Run Code Online (Sandbox Code Playgroud)