从Optional<String[]>获取数组首个元素遇问题,求解决方案
解决从Optional<String[]>获取第一个元素的问题
错误原因分析
- 第一个代码报错是因为Java数组没有
get(int)方法,你误用了集合的访问方式,数组元素需要用下标语法e[0]访问。 - 第二个代码输出奇怪值是因为你直接打印了
String[]对象本身,Java中打印数组默认输出的是它的类型标识和内存地址,不是数组内容。
正确解法
基础版(假设数组非空)
直接把e.get(0)改成e[0]即可:
String[] temp = new String[2]; temp[0] = "email1"; temp[1] = "email2"; Optional<String[]> email = Optional.of(temp); System.out.println(email.map(e -> e[0]).orElse(null));
运行后会输出email1,如果Optional为空则返回null。
安全版(处理数组为空的情况)
如果需要考虑Optional中的数组可能为空(长度为0)的情况,添加filter判断数组长度,避免数组越界异常:
String[] temp = new String[2]; temp[0] = "email1"; temp[1] = "email2"; Optional<String[]> email = Optional.of(temp); System.out.println(email.filter(arr -> arr.length > 0) .map(arr -> arr[0]) .orElse(null));
这样无论Optional为空,还是数组本身为空,都会返回null。
关于第二个代码的说明
email.stream().findFirst().get()本质上还是获取了原String[]对象,若要打印数组内容,需要用Arrays.toString(),但这不是你要的第一个元素,所以这个思路不适用你的需求。
内容的提问来源于stack exchange,提问作者QWERTY
相关产品推荐
相关产品推荐

