繁体   English   中英

如何转换可选<Integer>到 OptionalInt

[英]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());

现在变量asOptionalInt一个实例。

但是,您不能在第二个代码段中使用该实例,因为Stream.of(as)导致Stream<OptionalInt>并且我确定它不是您想要的。 这只是链接答案中的复制片段。 请记住,它保存的值是原始int ,而不是String

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM