2017-09-13 47 views
4

列表的最小非空LocalDateTime我知道如何让分LocalDateTime列表的感谢:https://stackoverflow.com/a/20996009/270143使用流

例如LocalDateTime minLdt = list.stream().map(u -> u.getMyLocalDateTime()).min(LocalDateTime::compareTo).get();

我的问题是稍有不同,虽然...

  1. 我想分钟LocalDateTime不是null
  2. null如果他们都null

我怎么会去关于以简洁的方式做到这一点?

回答

7

你可以简单地做:

Optional<LocalDateTime> op = list.stream() 
     .filter(Objects::nonNull) 
     .min(Comparator.naturalOrder()); 

而且absent值将表明,您的列表(或您的列表为空)

+0

在我的情况下,一个空列表将永远不会发生 - 因为事先检查 – ycomp

+0

简单而有效。 –

3

可能是这样的,也许?

LocalDateTime minDate = list.stream() 
    .filter(Objects::nonNull) 
    .map(u -> u.date) 
    .min(LocalDateTime::compareTo) 
    .orElse(null); 
+0

啊我想我可以只使用空'可选'是空的以指示'null' – ycomp

+1

@HubertGrzeskowiak可能'orElse(null)'而不是'get',因为OP在列表中全部为空时想要一个'null' – Eugene

+2

只是一个旁注,当元素类型的工具“Comparable”,这是最好的使用现有的'Comparator.naturalOrder()'而不是通过'ComparableType :: compareTo'创建一个新的比较器...... – Holger