我有一个for循环,它根据循环对象的值运行不同的方法.普通的旧Java方式是这样的
for(Object obj : inputList){
if(1 == obj.intVar){
executeFirst();
} else if (2 == obj.intVar) {
executeSecond();
} else {
executeDefault();
}
}
Run Code Online (Sandbox Code Playgroud)
或者使用简单的开关盒.
我知道我可以在Java 8中使用类似下面的东西.但对我来说,它似乎是Java 7和8之间的融合.我不确定我是否可以在这里使用filter/map/reduce,因为意图不是数据操作,但要获得特定的行为.我们有什么方法可以用纯Java 8方式做到这一点,还是这样做?
inpultList.stream().forEach(obj -> {
if(1 == obj.intVar){
executeFirst();
} else if (2 == obj.intVar) {
executeSecond();
} else {
executeDefault();
}
});
Run Code Online (Sandbox Code Playgroud)
提前致谢.
对于您的简单示例,这可能有点过度设计,但一般解决方案是使用Mapwith处理程序:
Map<Integer,Runnable> handlers = new HashMap<>();
handlers.put(1, () -> executeFirst());
handlers.put(2, () -> executeSecond());
Run Code Online (Sandbox Code Playgroud)
inputList.stream()
.map(obj -> handlers.getOrDefault(obj.intVar, () -> executeDefault()))
.forEach(Runnable::run);
Run Code Online (Sandbox Code Playgroud)
要么
inputList.forEach(obj -> handlers.getOrDefault(obj.intVar, () -> executeDefault()).run());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |