Lar*_*sen 42 java optional java-8
声明函数来映射值并在它们存在时使用它们是很方便的.
在你有几个强制对象和几个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);
但后来我不喜欢这段代码:
putOnPlate.accept(prepare.apply(vegetables));
所以我把它包起来:
Optional.of(vegetables).map(prepare).ifPresent(putOnPlate);
但这是错误的,因为蔬菜(在这个例子中)实际上不是可选的.它们非常重要,我给大家的印象是它们是可选的.
所以我的问题是:java中有一些类如java.util.Mandatory,所以我可以写:
Mandatory.of(vegetables).map(prepare).definitelyPresentSo(putOnPlate);
Hol*_*ger 27
是的,有这样的API.你可以替换
Optional.of(vegetables).map(prepare).ifPresent(putOnPlate);
同
Stream.of(vegetables).map(prepare).forEach(putOnPlate);
现在不得不忍受单元素Stream是任意元素流(包括可能的空流)的特殊情况.
但是您可以一次处理所有必需元素
Stream.of(mandatory1, mandatory2, mandatory3 /* etc */).map(prepare).forEach(putOnPlate);
甚至可以合并可选元素,但它不会像它应该那样方便,Optional.stream()直到Java 9才会引入.
| 归档时间: | 
 | 
| 查看次数: | 1891 次 | 
| 最近记录: |