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
)
)
;
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,