private Long calEarliestFillingToLatest ( List < ProjectDaily > dailyList ) { Optional < ProjectDaily > min = dailyList . stream ( ) . min ( Comparator . comparing ( ProjectDaily : : getWorkTime ) ) ; Optional < ProjectDaily > max = dailyList . stream ( ) . max ( Comparator . comparing ( ProjectDaily : : getWorkTime ) ) ; //System.out.println("min " + min); //System.out.println("max " + max); if ( min . isPresent ( ) && min . get ( ) . getWorkTime ( ) != null && max . isPresent ( ) && max . get ( ) . getWorkTime ( ) != null ) { long daySub = getDaySub ( getDay ( min . get ( ) . getWorkTime ( ) ) , getDay ( max . get ( ) . getWorkTime ( ) ) ) ; return daySub + 1 ; } else { return 1 L ;

ProjectDaily对象中的workTime属性类型是Date,使用 stream().min 或者 max 获取到的结果是 Optional<> ,通过 isPresent() 判断是否存在后,使用 .get() 方法获取到该对象。

由于数组是 String 类型,Collection找到 最大值 的方法仍然有效,使用Collection可以实现,因为格式是yyyyMM这意味着后面的年份总是大于较小年份的字符串值。1.直接使用Collections.max去 最大 的。例如找到下面数组的 最大 时间。2.用 JAVA 8里的方法。 BigDecimal maxDataFlowVO = nightFlow List . stream () .filter(o -> o.getNightFlow().compareTo(BigDecimal.ZERO) == 1) 根据属性A分组,然后 分组里属性B 最大 的值, 最后合并成 list Map<String, IWLS_EnDepotEntry> collect = endepot. stream ().collect( Collectors.groupingBy(IWLS_EnDepotEntry::getPurBCode,