循环内的条件操作,java 8方式

Tin*_*mas 2 java java-8

我有一个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)

提前致谢.

Hol*_*ger 5

对于您的简单示例,这可能有点过度设计,但一般解决方案是使用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)