List<Integer> orders = sysTokenIterationTops.stream().map(SysTokenIterationTop::getFdTopOrder).filter(Objects::nonNull).collect(Collectors.toList()); 这段代码是获得sysTokenIterationTops这个list对象中toporder属性,我现在需要这个里面最大的元素,且防止判空
时间: 2024-02-27 07:53:40 浏览: 78
好,你可以使用Java 8的Stream API来实现这个功能。可以将过滤和获取最大值的操作链式调用,代码如下:
Optional<Integer> maxOrder = sysTokenIterationTops.stream()
.map(SysTokenIterationTop::getFdTopOrder)
.filter(Objects::nonNull)
.max(Integer::compareTo);
首先通过map()
方法将SysTokenIterationTop
对象转换为其fdTopOrder
属性值,然后使用filter()
方法过滤掉为null
的元素。接着使用max()
方法获取最大值,max()
方法返回一个Optional
对象,防止null
值的情况发生。最后你可以通过Optional
对象的方法获得最大值,代码如下:
if (maxOrder.isPresent()) {
Integer max = maxOrder.get();
// do something with max
}
其中isPresent()
方法用于判断是否存在最大值,get()
方法用于获取最大值。
相关问题
if (sysTokenIterationTops.size() > 0) { List<Integer> orders = sysTokenIterationTops.stream().map(SysTokenIterationTop::getFdTopOrder).filter(Objects::nonNull).collect(Collectors.toList()); }具体的是这个,再优化下
你可以进一步优化这段代码,使其更加简洁和高效。可以使用Optional
类的map()
方法来实现获取最大值,代码如下:
Integer maxOrder = sysTokenIterationTops.stream()
.map(SysTokenIterationTop::getFdTopOrder)
.filter(Objects::nonNull)
.max(Integer::compareTo)
.orElse(null);
这段代码与之前的代码相比,使用了Optional
类的map()
方法来获取最大值,而不是先将结果转换为List
对象,再获取最大值。这样可以避免创建不必要的List
对象,提高代码的效率。最后使用orElse(null)
方法来处理null
值的情况,如果最大值不存在则返回null
。
所以,最终的代码如下:
Integer maxOrder = sysTokenIterationTops.stream()
.map(SysTokenIterationTop::getFdTopOrder)
.filter(Objects::nonNull)
.max(Integer::compareTo)
.orElse(null);
if (maxOrder != null) {
// do something with maxOrder
}
其中sysTokenIterationTops
是你需要获取最大值的List
对象,SysTokenIterationTop
是sysTokenIterationTops
中元素的类型,getFdTopOrder()
是SysTokenIterationTop
中获取fdTopOrder
属性的方法。
相关推荐













