Java 8 lambdas在列表流上使用if else

pra*_*upd 5 java lambda

我有一个以下生产就绪的java 8方法; 哪一个

  • 迭代列表
  • 基于谓词的过滤器
  • 如果找到基于过滤器的0方法,则抛出RuntimeException消息1.
  • 如果根据过滤器找到多个方法,则抛出RuntimeException消息2.
  • 否则返回找到的方法本身

我用90s的一些lambda魔法达到了我想要的效果if else......

private Method getEventHandler(Class listener, Class<? extends Event> event) {
    List<Method> methods = asList(listener.getMethods())
            .stream()
            .filter(method -> shouldHandleEvent(method, event))
            .collect(Collectors.toList());

    if ( methods.size() == 0 ) {
        throw new RuntimeException("No event handlers");
    } else if ( methods.size() > 1 ) {
        throw new RuntimeException("More than one handler.");
    }

    return methods.get(0);
}

private boolean shouldHandleEvent(Method method, Class<? extends Event> event) {
    return method.getParameterCount() ==1 && 
           method.getParameterTypes()[0].isAssignableFrom(event);
}
Run Code Online (Sandbox Code Playgroud)

如果我只有两个条件,我将检查确切的1个或更多/小于1,我可以编写如下代码,

private Method getEventHandler(Class listener, Class<? extends Event> event) {
         return asList(listener.getMethods())
            .stream()
            .filter(method -> shouldHandleEvent(method, event))
            .findFirst()
            .orElseThrow(() -> new RuntimeException("No event handlers"));
}
Run Code Online (Sandbox Code Playgroud)

但是,我有三个条件要检查,我试图表现得好像我住在2016年,所以尝试使用lambda替换if else第一种方法,以便它更清洁.

我的猜测如下,

private Method getEventHandlerProposed(Class listener, Class<? extends Event> event) {
      return asList(listener.getMethods())
            .stream()
            .filter(method -> shouldHandleEvent(method, event))
            .collect(Collectors.toList())
            .stream()
            .count() == 0 -> throw new RuntimeException("No event handlers");
            .or
            .count() > 1 -> throw new RuntimeException("More than one handler.");
            .orElse()
            .findFirst()
            .get();
}
Run Code Online (Sandbox Code Playgroud)

我确信这是不可能的,因为我建议,但寻找一些整洁的lambda,可以让它看起来更好,让我开心.