Java 如何检索列表中与条件匹配的最大元素?

Java 如何检索列表中与条件匹配的最大元素?,java,lambda,Java,Lambda,Java8和lambdas一般都是新的。以下是我所拥有的: 一个简单的凭据类: public interface Credentials { boolean isPasswordEnabled(); String getCreatedDate(); } 返回凭据列表的简单服务: List<Credentials> credentials = credentialsService.getCredentials(); 使用以下命令: credentials.st

Java8和lambdas一般都是新的。以下是我所拥有的:

一个简单的凭据类:

public interface Credentials {

    boolean isPasswordEnabled();

    String getCreatedDate();
}
返回凭据列表的简单服务:

List<Credentials> credentials =  credentialsService.getCredentials();
使用以下命令:

credentials.stream()
.filter(Credentials::isPasswordEnabled)
.max(Comparator.comparing(Credentials::getCreatedDate))

使用过滤器,然后查找最大值:

Credentials latestCredentials = credentials.stream()
  .filter(Credentials::isPasswordEnabled)
  .max(Comparator.comparing(Credentials::getCreatedDate))
  .get();
请注意,由于
max()
返回
Optional
,因此需要调用
.get()
以获取最大值


如果没有启用的元素(或者
凭证
为空),您将得到一个
NoTouchElementException
。如果您想在这种情况下引发特定的异常,请不要调用
.get()
调用
。OrelsThrow(SomeException::new)

知道这是一件简单的事情。谢谢事实上,这并不简单,因为它使用的是您可能还不知道的流式API,而您以前只使用了collections API。请注意,日期是字符串,而不是日期或本地日期。最好使用此选项谢谢,这是我要找的答案。在添加.get()之前,正在获取不兼容的类型。
Credentials latestCredentials = credentials.stream()
  .filter(Credentials::isPasswordEnabled)
  .max(Comparator.comparing(Credentials::getCreatedDate))
  .get();