日期 : 2021-04-10 17:22:56作者 : 望京博格
//java 中 对于有返回值的语句是必须要赋值给一个对象的。
//也就是说
//这个语句是编译不过的
1==1;
// 这样通过短路的方式去简化 if 语句是不行的
1==2&&method();
//所以对于没有返回值的 if 语句只能老实的写成
if(1==2)
method();
//但是这样的话如果放到 lamda 表达式中就会让语句变得很复杂
//理想状态 1
list.foreach(val->1==2&&method(val));
//理想状态 2 这里的 void 表示没有任何操作,java 也不支持这种空操作
list.foreach(val->1==2?method(val));
list.foreach(val->1==2?method(val):void);
//现实
list.foreach(val->{
if(1==2)
method(val);
});
所以有什么更好的办法吗?
你可以写个静态方法
public class Utils {
public static <T, R> R ifTrueThenDo(boolean b, T params, Function<T, R> callback) {
if (b) {
return callback.apply(params);
}
return null;
}
}
然后在别的类里引入:
import static xxx.Utils.ifTrueThenDo;
接下来你就可以一行语句完成你的这些功能了, 比如:
ifTrueThenDo(1==2, val, (val) -> method(val))