如何在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】:

您可以创建一个最多两个Tokens 的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中计算元素并首先找到[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 ArrayList 中的重复元素?

如何计算嵌套列表中的元素[重复]

如何检查一个元素在列表中存在多少次[重复]

怎样求数组中元素重复的次数

熊猫计算列中的元素并以重复的方式显示

如何在java-8中查找流类型[重复]