小知识分享:
之前项目业务有用到对集合获取最大值的需求,在网上看了很多文章是这样写法
Integer max= numbers.stream().reduce(Integer::max).get();
项目验收的时候通过sonar扫码会出现这样的问题(如图):
Call “Optional#isPresent()” before accessing the value
修改如下:
Optional<Integer> reduce = numbers.stream().reduce(Integer::max);//得到最大值
Integer max = null;
if(reduce.isPresent()){
max = reduce.get();
}
public void test(){
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(3);
numbers.add(5);
numbers.add(10);
numbers.add(2);
numbers.add(5);
numbers.add(4);
numbers.add(6);
Optional<Integer> reduce = numbers.stream().reduce(Integer::max);//得到最大值
Integer max = null;
if(reduce.isPresent()){
max = reduce.get();
}
Optional<Integer> reduce1 = numbers.stream().reduce(Integer::min);//得到最小值
Integer min = null;
if(reduce1.isPresent()){
min = reduce1.get();
}
System.out.println(max);
System.out.println(min);
}