//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); });
所以有什么更好的办法吗?
![]() | 1 abersheeran 2021-04-09 14:39:12 +08:00 ![]() 我觉得吧,你都用 Java 了就别想着玩花活了。这语言最大的工业优势就是你玩不出什么花活。能玩花火的,基本都被人说是重构火葬场了。 |
2 sylxjtu 2021-04-09 14:40:36 +08:00 ![]() 先转成 stream,filter 之后再 foreach |
![]() | 3 zydxn 2021-04-09 14:43:36 +08:00 ![]() 我觉得不在 foreach 里面用方法引用之类的就没必要用 foreach,正常写 for 循环就行了 要么就是 stream().filter(predicate).forEach(this::method) |
4 zhuweiyou 2021-04-09 14:44:51 +08:00 ![]() .filter() .forEach() |
5 zm8m93Q1e5otOC69 2021-04-09 14:45:11 +08:00 ![]() 直接写有啥弊端吗? 语法糖不是为了优化才搞的嘛? |
![]() | 6 chendy 2021-04-09 14:54:33 +08:00 filter + forEach 不过就老老实实写个 for + if 也不难看啊(说不定效率还更高)…… |
![]() | 7 rizon OP 好吧 看来 java 就别想那么多花样了 哈哈 |
8 bthulu 2021-04-09 15:04:58 +08:00 你可以写个静态方法 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)) |
9 jones2000 2021-04-09 15:37:41 +08:00 代码能高效的解决问题不就行了. 其他的都不重要. 代码最后是编程成产品给客户用, 客户才不管你用什么语法,语言. |
![]() | 10 Kasumi20 2021-04-09 15:47:27 +08:00 用 Kotlin,你可以完全不用写 if 语句 |
11 CrazyMonkeyV 2021-04-09 16:22:55 +08:00 不知道 Java 行不行,字典了解下 |
12 yazinnnn 2021-04-09 16:36:51 +08:00 我比较震惊 1==1;居然编译不过去 虽然 java 的 stream 比较嗦晦涩,但是功能还是齐全的... 你觉得不全的话可以用 kotlin 库提供的扩展方法 |
![]() | 13 ychost 2021-04-09 17:31:55 +08:00 我倒是希望 Java 能引入可选链,NullPointerException 太讨厌了 |
![]() | 14 CantSee 2021-04-09 17:34:18 +08:00 给他包装几层,包装的别人发现不了 |
![]() | 17 dallaslu 2021-04-09 18:40:28 +08:00 这还要进一步简化吗?你省略了花括号,已经是离经叛道了好吗? |
18 morimi2026 2021-04-09 19:31:33 +08:00 via iPhone 如果一个语句能清晰表达意思,就不用简化。你举例的各种方式,哪怕 java 支持,都没直接用 if 来写表达得清晰 |
![]() | 19 ScepterZ 2021-04-09 19:37:16 +08:00 我觉得明显是先 filter 再 foreach 更好,在 foreach 里先做个判断这种写法后续容易忘记导致出错什么的 先 filter 更符合正常思维 |
20 securityCoding 2021-04-10 14:05:35 +08:00 via Android 业务多规则判断可以写成责任链 |