我正在接听电话"可选#isPresent()"在访问以下代码段的Sonar问题中的值之前,请帮我解决此问题。
List <Department> deptList =new ArrayList();
List<Student> studList=new ArrayList();
Department dept= studList.stream().min(comparator.comparing(Department::getDepartmentNo)).get();
通话&#34;可选#isPresent()&#34;在访问值之前。
答案 0 :(得分:3)
Optional#get()
会抛出异常。 Sonar希望你在获取值之前检查可选项,如下面的代码片段,但我不会推荐它,因为Optional
类的整个想法是防止空指针异常
Optional<Department> deptOpt= studList.stream().min(comparator.comparing(Department::getDepartmentNo));
Department department = null;
if(deptOpt.isPresent())
department = deptOpt.get();
}
更好的做事方式是:
Department department = deptOpt.orElse(Department::new);
在这种情况下,如果Optional不包含任何值(为空),则deptOpt将返回默认的Department对象。
无论如何 - 你选择的任何方法都应该解决你的问题。
答案 1 :(得分:1)
为了使您的代码正常工作,请使用Option中的至少一个安全选项(ha,此处允许的冗余)
Department dept= studList.stream().min(comparator.comparing(Department::getDepartmentNo)).orElse(null);
其中“null”应该是空列表的一个值,我不知道上下文,这就是为什么我把null,请不要使用null!,选择正确的值