我有一个以下生产就绪的java 8方法; 哪一个
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,可以让它看起来更好,让我开心.
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |