呼叫"可选#isPresent()"在访问该值之前

时间:2017-10-31 18:11:49

标签: java java-8 java-stream optional

我正在接听电话"可选#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;在访问值之前

2 个答案:

答案 0 :(得分:3)

如果Optional中没有任何内容,则

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!,选择正确的值