当前位置: 首页 > 知识库问答 >
问题:

Java中的Lambda:查找重复id并抛出异常

包修贤
2023-03-14

我想检查一个列表,如果列表中有多个id,则使用lambda表达式抛出异常:


final List<UUID> carUuidList = carRepository.getUuidList(); 

for (int i = 0; i < carUuidList.size(); i++) {
    final UUID carUuid = carUuidList.get(i);
    if(carUuidList.stream().filter(c -> c.equals(carUuid)).collect(Collectors.toList()) > 1){
        //throw exception
    }
}

但它不起作用,我认为有更好的方法使用.orelsethrow(()->...())。那么,如何检查caruuidlist并在有多个UUID的情况下抛出错误呢?

共有1个答案

胡昊
2023-03-14

Java9+解决方案具有短路的哈希集<>()::add而不是迭代整个列表的新哈希集<>(list)

List<UUID> carUuidList = carRepository.getUuidList(); 

carUuidList.stream()
           .dropWhile(new HashSet<>()::add)
           .findFirst()
           .ifPresent(dup -> {throw new IllegalArgumentException("duplicate found: " + dup);} );
 类似资料:
  • 问题内容: 我知道如何创建对具有参数的方法的引用,并返回,它是: 但是,如果该函数引发异常,例如定义为: 如何定义此参考? 问题答案: 你需要执行以下操作之一。 如果是你的代码,请定义自己的函数接口,该接口声明已检查的异常: 并使用它: 否则,包装一个不声明检查异常的方法: 接着: 要么:

  • 我知道如何创建对具有参数并返回的方法的引用,它是: 但是,如果函数抛出异常(假设它被定义为: 我如何定义这个引用?

  • 在我正在进行的一个项目中,我发现了一个类,它在一些复杂的异常处理中包装了它的超类的所有方法。看起来和那个差不多: 我立即想到:“哇,怎么会有一个泛型包装器,然后在每个方法中调用它呢?这个类会短10倍!”。所以我得工作了。 如何获得一个函数接口来处理多个泛型异常?

  • 问题内容: 我有一个关于Java中重新引发异常的非常简单的问题。 这是代码片段: 为什么我们需要在第一个版本中重新抛出,而第二个版本看起来更优雅?可能有什么好处,并且优先选择哪个版本? 问题答案: 你是对的。第二版更好。而且,第一个版本没有任何意义。除了异常的堆栈跟踪为“错误”之外,它的功能相同。 有“重新抛出”异常的原因如下: 如果您之前有事要做。 如果捕获一种类型的异常并抛出另一种类型的异常:

  • 无法在中包装流对象。 我试过这样: Eclipse开始抱怨在下划线,并建议它需要用try/catch包围