用方法引用'Objects :: nonNull'替换这个lambda

Beg*_*ake 4 java-8

我编写了代码,从包含Date变量的对象列表中查找最新日期.

list.stream().map(segment -> segment.lastLoad).filter(x->x!=null).max(Date::compareTo).get()

但我得到了声纳问题

用方法引用'Objects :: nonNull'替换这个lambda.

我无法弄清楚的是我在哪里可以使用声纳lint问题所述的方法参考.

Eug*_*ene 7

.filter(x->x!=null) == .filter(Objects::nonNull)
Run Code Online (Sandbox Code Playgroud)

有趣的是你已经使用了方法引用(但没有看到这个):

max(Date::compareTo)
Run Code Online (Sandbox Code Playgroud)

你也显然返回Date从不过Optional<Date>,你应该得到一个警告(如果使用IDEA),这不是安全地调用get直接上Optional.

而且你还可以替换max(Date::compareTo)使用max(Comparator.naturalOrder()),因为Date已经是Comparable.

  • ...我建议用`max(Comparator.naturalOrder())`替换`max(Date :: compareTo)`. (4认同)