如何在Java 8中计算元素并首先找到[重复]
Posted
技术标签:
【中文标题】如何在Java 8中计算元素并首先找到[重复]【英文标题】:How to count elements and find first in Java 8 [duplicate] 【发布时间】:2018-03-27 21:33:40 【问题描述】:我有一个令牌列表,这个列表必须包含只有一个元素处于活动状态。如果没有一个元素的状态等于 active,我需要抛出一个异常。
我想用 lambda 表达式写这个,这是我的代码:
List<Token> listResult = tokenRepository.findByReference(tokenRefId);
if (listResult == null || listResult.isEmpty())
throw new IllegalStateException(Messages.TOKEN_NOT_FOUND);
if (listResult.stream().filter(t -> t.getStatus().equals(TokenStatus.ACTIVE.code())).count() != 1)
throw new IllegalStateException(Messages.ONE_TOKEN_MUST_BE_ACTIVATED);
Token token = listResult.stream().filter(t -> t.getStatus().equals(TokenStatus.ACTIVE.code()))
.findFirst().orElseThrow(() -> new IllegalStateException(Messages.ONE_TOKEN_MUST_BE_ACTIVATED));
请注意,我两次抛出相同的异常。如何检查是否只有一个元素处于活动状态并在同一个 lambda 表达式中获取它?
【问题讨论】:
【参考方案1】:您可以创建一个最多两个Token
s 的List
,然后检查它的大小:
List<Token> filtered =
listResult.stream()
.filter(t -> t.getStatus().equals(TokenStatus.ACTIVE.code()))
.limit(2)
.collect(Collectors.toList());
if (filtered.size () != 1)
throw new new IllegalStateException(Messages.ONE_TOKEN_MUST_BE_ACTIVATED);
Token token = filtered.get(0);
【讨论】:
以上是关于如何在Java 8中计算元素并首先找到[重复]的主要内容,如果未能解决你的问题,请参考以下文章