Java使用Stream操作Stackoverflow API时如何去除输出的Optional[]包裹
你直接打印Optional对象时触发了它的toString()方法,才会出现Optional[xxx]格式的输出,想要拿到内部的字符串可以根据业务场景选择以下几种方法:
1. 确定一定存在返回值时使用get()
如果你的业务逻辑可以保证每次调用getShortestTitel()都一定能拿到非空的结果,可以直接调用get()方法取值:
String shortestTitle = getShortestTitel().get();
注意:如果Optional内部为空时调用get()会抛出NoSuchElementException异常
2. 为空时返回自定义默认值用orElse()
如果存在查询不到结果的场景,可以给默认值兜底,避免空指针或异常:
// 空的时候返回自定义的默认字符串 String shortestTitle = getShortestTitel().orElse("未查询到符合要求的标题");
3. 复杂默认值生成用orElseGet()
如果默认值需要通过复杂逻辑生成,优先用orElseGet(),它只有在Optional为空的时候才会执行传入的生成逻辑,性能更好:
String shortestTitle = getShortestTitel().orElseGet(() -> { // 可以在这里写自定义的默认值生成逻辑 return "默认标题"; });
4. 为空时抛出指定异常用orElseThrow()
如果查询不到结果属于业务异常场景,可以主动抛出自定义异常:
String shortestTitle = getShortestTitel().orElseThrow(() -> new RuntimeException("未查询到最短标题"));
内容的提问来源于stack exchange,提问作者Scoopex
相关产品推荐
相关产品推荐

