声明函数以映射值并在存在值时使用它们是很方便的。
在您有几个强制对象和几个可选对象的情况下,我发现自己将其他对象包装为可选对象。也可以使用(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.of(vegetables).map(prepare).definitelyPresentSo(putOnPlate);
我可能错了,但是如果你不喜欢使用可选
,你可以只使用一个对象的Stream
。所以与其
Optional.of(vegetables).map(prepare).ifPresent(putOnPlate);
您只需使用:
Stream.of(vegetables).map(prepare).forEach(putOnPlate);
结果将是相同的。如果蔬菜为空,这两种方法都将抛出NPE
。
Arrays.asList(10, null).forEach(value -> {
Optional.of(value).map(x -> x.toString()).ifPresent(System.out::println);
Stream.of(value).map(x -> x.toString()).forEach(System.out::println);
});
NPE安全版本将是
Optional.ofNullable(value).map(x -> x.toString()).ifPresent(System.out::println);
Stream.of(value).filter(Objects::nonNull).map(x -> x.toString()).forEach(System.out::println);
可选
只是对象的容器,该对象可能包含也可能不包含非空值。
可选
背后的主要思想是抽象空性(摆脱空检查),并为使用可选值提供流畅的API。
对于总是存在的值,没有什么可抽象的(至少没有实际值),因此纯Java中不存在这样的工具。
在其他函数式语言中,您有多个“单元”工具,如可选
,可用于不同的用例。如果你想把它们带到Java中,Javaslang可能是最好的选择。您可以找到像
选项
,尝试
,惰性
,验证
,或者
,未来
,元组
,以及整个集合API
,它们允许以您描述的类似方式进行编码。
是的,有这样一个API。你可以代替
Optional.of(vegetables).map(prepare).ifPresent(putOnPlate);
与
Stream.of(vegetables).map(prepare).forEach(putOnPlate);
现在不得不接受这样一个事实:单个元素流
是任意元素流(包括可能的空流)的特例。
但您可以同时处理所有必需元素
Stream.of(mandatory1, mandatory2, mandatory3 /* etc */).map(prepare).forEach(putOnPlate);
甚至可以合并可选元素,但它不会像optional那样方便。stream()
将在Java之前引入
问题内容: Spring有一个非常方便的便捷类,称为PropertyPlaceholderConfigurer,它使用标准的.properties文件并将其值注入到bean.xml配置中。 有谁知道一个类做的事情完全相同,并且以相同的方式与Spring集成,但是接受XML文件作为配置。具体来说,我正在考虑Apache摘要格式的配置文件。这样做很容易,我只是想知道是否有人已经拥有了。 有什么建议吗?
问题内容: Java中是否有类似于该接口的接口,可以接受其call方法的参数? 像这样: 如果已有已经可以使用的东西,我宁愿避免创建新的类型。还是有更好的策略让多个客户端实现并插入可调用例程? 从此处复制http://www.programmingforums.org/thread27905.html 问题答案: 从Java 8开始,软件包中提供了一整套类似于函数的接口。您要的具体要求很简单。 在
我正在寻找一个Hamcrest Matcher到返回java的单元测试方法。util。可选类型。比如: 是否有任何可用的实现抛出Maven存储库?
上面是后台返回的一部分数据 请问大佬们有知道如何通过这些数据 ,做一个类似于电影院选票的那种嘛?想做的是一个停车场的车位的选择那种
问题内容: 根据这个答案 我试图在我的桌子上创建一个Select for 但是我对位类型示例sqlfiddle遇到了问题,如您所见,它应该返回4行,但它仅返回3行,所以我想念什么? 问题答案: 这是因为您可以将as作为列的值。而且SQL具有三值逻辑,因此检查将返回,而不是(如您期望的那样)。我认为此查询将为您提供帮助:
问题内容: 是否有一种方法可以根据将class属性的值设置为两个特定的类来选择CSS元素。例如,假设我有3个div: 基于它是foo AND bar类的成员,我可以写什么CSS来选择列表中的第二个元素? 问题答案: 链接两个类选择器(之间没有空格): 如果仍然需要处理IE6之类的古老浏览器,请注意,它无法正确读取链接的类选择器:无论您列出什么其他类,它都只会读取 最后一个 类选择器(在这种情况下)