Java 如何转换可选<;整数>;选择权
我有一个可选的Java 如何转换可选<;整数>;选择权,java,java-stream,optional,Java,Java Stream,Optional,我有一个可选的变量: //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))); 在这种情况下,我
//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)));
在这种情况下,我想为我的方法返回一个optionAgent:
if (as.isPresent()) {return Optionalint.of(as);} //Obviously it is not working
return OptionalInt.empty();
在这种情况下,如何将OptionalStream.of(as).filter(s -> s != null && s.matches("\\d+"))
.mapToInt(Integer::parseInt).findAny();
它将给我一个错误:对于可选类型,未定义方法匹配项(字符串)
有办法解决这个问题吗?谢谢 使用
Optional::map
将值映射到Optional
中,然后使用Optional::orElse
返回它或一个空的optionant.empty()
。我假设方法比较器工作正常:
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
是optionant
的一个实例
但是,您不能在第二个代码段中使用该实例,因为Stream.of(as)
会导致Stream
,我相信这不是您想要的。这只是从链接答案中复制的片段。记住,它所持有的值是一个原语int
,而不是String
。请清楚地解释为什么链接的帖子没有帮助。展示你是如何利用链接帖子的,以及它是如何解决你的问题的
,而不是返回(as)的选项代码>,因为as
已经是一个选项
?