【问题标题】:How to count elements and find first in Java 8 [duplicate]如何在Java 8中计算元素并首先找到[重复]
【发布时间】: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 表达式中获取它?

【问题讨论】:

    标签: java lambda java-8


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 2017-11-06
      • 2016-03-07
      • 2020-07-23
      • 1970-01-01
      相关资源
      最近更新 更多