[英]How to convert Optional<Integer> to OptionalInt
我有一个 Optional<Integer> 变量:
//es is an arraylist, rock is a class in the arraylist
var as = IntStream.range(0,es.size()).boxed()
.filter(i->es.get(i) instanceof Rock)
.max((l1,l2) -> comparator(es,(Rock)es.get(l1),(Rock)es.get(l2)));
在这种情况下,我想为我的方法返回一个 OptionalInt:
if (as.isPresent()) {return Optionalint.of(as);} //Obviously it is not working
return OptionalInt.empty();
在这种情况下,如何将 Optional<Integer> 转换为 OptionalInt? 顺便说一句,我发现了这个问题How to convert an Optional to an OptionalInt? 对我来说不是很有帮助,当我喜欢时:
Stream.of(as).filter(s -> s != null && s.matches("\\d+"))
.mapToInt(Integer::parseInt).findAny();
它会给我一个错误: Optional 类型的方法matches(String) 是未定义的任何想法来解决这个问题? 谢谢!
使用Optional::map
将值映射到Optional<OptionalInt>
,然后使用Optional::orElse
返回它或一个空的OptionalInt.empty()
。 我假设方法comparator
工作正常:
OptionalInt as = IntStream.range(0, es.size()).boxed()
.filter(i-> es.get(i) instanceof Rock)
.max((l1, l2) -> comparator(es, (Rock)es.get(l1), (Rock)es.get(l2)))
.map(OptionalInt::of)
.orElse(OptionalInt.empty());
现在变量as
是OptionalInt
一个实例。
但是,您不能在第二个代码段中使用该实例,因为Stream.of(as)
导致Stream<OptionalInt>
并且我确定它不是您想要的。 这只是链接答案中的复制片段。 请记住,它保存的值是原始int
,而不是String
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.