用java8写法优化
时间: 2023-07-04 17:26:37 浏览: 76
好的,你可以使用Java 8的Optional类来实现这个功能,代码如下:
```
Optional<Integer> maxOrder = Optional.ofNullable(sysTokenIterationTops)
.map(List::stream)
.orElseGet(Stream::empty)
.map(SysTokenIterationTop::getFdTopOrder)
.filter(Objects::nonNull)
.max(Integer::compareTo);
if (maxOrder.isPresent()) {
Integer max = maxOrder.get();
// do something with max
}
```
首先使用`Optional.ofNullable()`方法来判断`sysTokenIterationTops`是否为`null`,如果为`null`则返回一个空的`Optional`对象。接着使用`map()`方法将`List`对象转换为`Stream`对象,如果`List`对象为`null`则返回一个空的`Stream`对象。然后使用`map()`方法将`SysTokenIterationTop`对象转换为其`fdTopOrder`属性值,使用`filter()`方法过滤掉为`null`的元素,最后使用`max()`方法获取最大值。最终返回的是一个`Optional`对象,判断是否存在最大值并获取最大值的操作与之前的方法相同。
需要注意的是,当`sysTokenIterationTops`为`null`或空时,使用这种方式获取的最大值为`Optional.empty()`。如果需要返回`null`值,可以在获取最大值时使用`orElse(null)`方法,代码如下:
```
Integer maxOrder = Optional.ofNullable(sysTokenIterationTops)
.map(List::stream)
.orElseGet(Stream::empty)
.map(SysTokenIterationTop::getFdTopOrder)
.filter(Objects::nonNull)
.max(Integer::compareTo)
.orElse(null);
if (maxOrder != null) {
// do something with maxOrder
}
```
其中`isPresent()`方法用于判断是否存在最大值,`get()`方法用于获取最大值。
阅读全文