当前位置: 首页 > 知识库问答 >
问题:

是否有一个类类似于可选类,但适用于非可选类?

尉迟正奇
2023-03-14

声明函数以映射值并在存在值时使用它们是很方便的。

在您有几个强制对象和几个可选对象的情况下,我发现自己将其他对象包装为可选对象。也可以使用(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);

共有3个答案

蔚元明
2023-03-14

我可能错了,但是如果你不喜欢使用可选,你可以只使用一个对象的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);

可选只是对象的容器,该对象可能包含也可能不包含非空值。

左丘阳晖
2023-03-14

可选背后的主要思想是抽象空性(摆脱空检查),并为使用可选值提供流畅的API。

对于总是存在的值,没有什么可抽象的(至少没有实际值),因此纯Java中不存在这样的工具。

在其他函数式语言中,您有多个“单元”工具,如可选,可用于不同的用例。如果你想把它们带到Java中,Javaslang可能是最好的选择。您可以找到像选项尝试惰性验证或者未来元组,以及整个集合API,它们允许以您描述的类似方式进行编码。

司空和悌
2023-03-14

是的,有这样一个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之类的古老浏览器,请注意,它无法正确读取链接的类选择器:无论您列出什么其他类,它都只会读取 最后一个 类选择器(在这种情况下)