Java 语言代码实现一个最优写法。

2022-03-31 16:49:06 +08:00
 godleon

需求

JAVA 语言, 提供一个静态方法接收动态 Integer 参数,把接收到所有 Integer 不为 Null 的相加 返回总和。

支持 stream ,需要一个最优的写法! 可以评论一下,看看大佬们的代码功底!让我这个菜鸟采纳一下~

4577 次点击
所在节点    程序员
50 条回复
Leviathann
2022-03-31 16:52:58 +08:00
动态 Integer 参数
指的是 vararg ?
dcsuibian
2022-03-31 16:53:44 +08:00
reduce
godleon
2022-03-31 16:55:25 +08:00
@Leviathann 就是调一次这个方法可以传入 N 个 Integer
BiChengfei
2022-03-31 16:59:54 +08:00
```
@Test
public void test022() {
System.out.println(count(1, 2, 3, 4, 5));
}

public int count(int... input) {
return Arrays.stream(input).sum();
}
```
这个可以吗
BiChengfei
2022-03-31 17:00:53 +08:00
静态就自己加个 static
privatetan
2022-03-31 17:01:04 +08:00
你是来白嫖代码的吧
godleon
2022-03-31 17:03:36 +08:00
@BiChengfei 差不多了 ,你这个差一个非空效验,可以写

return Arrays.stream(input).mapToInt(n -> (n != null ? n : 0)).sum();

这个应该算挺优了
micean
2022-03-31 17:07:40 +08:00
少了并行计算
BiChengfei
2022-03-31 17:07:54 +08:00
@godleon 入参用的 int ,不可能为 null
godleon
2022-03-31 17:08:37 +08:00
@BiChengfei 需求就是 Integer
gitdoit
2022-03-31 17:10:33 +08:00
public static void main(String[] args) {
System.out.println(sum(1,2,4,null,3,5));
}
public static int sum(Integer ... number) {
return Stream.of(number).filter(Objects::nonNull).reduce(0, Integer::sum);
}
BiChengfei
2022-03-31 17:12:34 +08:00
@godleon 基本类型自动拆箱,方法入参你可以写成 Integer
count(new Integer(1), new Integer(2), new Integer(3))
godleon
2022-03-31 17:18:01 +08:00
@gitdoit 老哥稳
Cbdy
2022-03-31 17:19:32 +08:00
public static int sumInt(@Nullable Integer @NotNull ... ints) {
var sum = 0;
for (var it : ints) {
if (it != null) {
sum += it;
}
}
return sum;
}
anzu
2022-03-31 17:57:41 +08:00
如果只有 null ,我是说 Integer[] arr = null; 的情况
所有上来就用 stream 的必报错,让你们优雅,哈哈哈
oneisall8955
2022-03-31 18:08:08 +08:00
@anzu 那为什么不反思下 null 时候要调呢,接口定义可以协定不处理 null 的。
这到底是调用者还是被调用者的问题?
Leviathann
2022-03-31 18:11:59 +08:00
@anzu 什么意思,vararg 哪来的 null?
Saxton
2022-03-31 18:12:33 +08:00
方法几百种,没有什么最优的,只有最适合你的自己的,可能你写的这个别人认为这里不行,别人写的你认为那里不行,每个人有每个人的写作风格。
FrankHB
2022-03-31 18:17:15 +08:00
?现在 Java 普及了 Babel 类似物了么?不卡源语言版本的?
(要能用 transpiler 一般也是全体 JVM 语言,用不着特指 Java 。)
yazinnnn
2022-03-31 18:18:05 +08:00
fun sum(vararg array: Int?): Int {
return array.filterNotNull().fold(0) { acc, i -> acc + i }
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/844140

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX