首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Java函数式编程简化if-else条件

使用Java函数式编程简化if-else条件
EN

Stack Overflow用户
提问于 2018-10-13 13:29:39
回答 4查看 355关注 0票数 2

对于使用Java 8特性简化以下代码块,有什么建议吗?

代码语言:javascript
复制
int[] ans = new int[2];
list.forEach(i -> {
    if (i > 0) {
        ans[0] += 1;
    } else if (i < 0) {
        ans[1] += 1;
    }
});

附言:我不确定是否应该发布此here

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-10-13 15:26:01

如果你不想数零,那么你的代码就是最简单的。如果你想把零算作正数,那么你可以把它缩短成这样。

代码语言:javascript
复制
int[] ans = new int[2];
for (int i : list) ans[i < 0 ? 1 : 0] += 1;
票数 4
EN

Stack Overflow用户

发布于 2018-10-13 14:28:58

代码语言:javascript
复制
 ans[0] = (int)list.stream().filter(x -> x < 0).count();
 ans[1] = (int)list.stream().filter(x -> x > 0).count();

但我几乎不认为这是一种简化,你的解决方案已经尽可能简单了。

如果您确实想要计算零,可以简化为:

代码语言:javascript
复制
 list.forEach(x -> ++ans[x >>> 31])
票数 2
EN

Stack Overflow用户

发布于 2018-10-13 16:10:05

我建议

代码语言:javascript
复制
int[] ans = new int[2];
list.forEach(i -> ans[i >>> 31] += i==0 ? 0 : 1);

其中,i >>> 31丢弃除符号位之外的所有位(即,与i<0 ? 1 : 0相同),第二个条件句柄为零。

我不敢说,它真的比原来的更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52789827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档