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();
在这种情况下,如何将Optional转换为OptionalInt? 顺便说一句,我发现这个问题对我的情况没有太大帮助,当我喜欢:

Stream.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
已经是一个
选项