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