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

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

需求

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

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

4587 次点击
所在节点    程序员
50 条回复
molicloud
2022-03-31 18:20:03 +08:00
accuracy 的值越大,精确度越高

public static long sum(Integer ... numbers) throws InterruptedException {
long accuracy = 1000L;
long startTime = System.currentTimeMillis();
for (Integer number : numbers) {
Thread.sleep(number * accuracy);
}
return (System.currentTimeMillis() - startTime) / accuracy;
}
yazinnnn
2022-03-31 18:26:48 +08:00
kotlin 对 Int 的集合做了优化,直接这样就行

fun sum(vararg array: Int?): Int {
return array.filterNotNull().sum()
}
lululau
2022-03-31 18:27:00 +08:00
IntStream.of(1, 2, 3).filter(Objects::nonNull).sum()
yazinnnn
2022-03-31 18:30:49 +08:00
fun sum(vararg array: Int?): Int {
return array.sumOf { it?:0 }
}
Red998
2022-03-31 18:32:05 +08:00
List<Integer> objects = Lists.newArrayList();
objects.stream().filter(Objects::nonNull).mapToInt(Integer::intValue).sum();
zzh7982
2022-03-31 18:38:00 +08:00
private static int sum(Integer... i){
return Arrays.stream(i).filter(Objects::nonNull).mapToInt(x -> x).sum();
}
Cbdy
2022-03-31 18:47:13 +08:00
@Leviathann 你好,有可能为 null 的
hepin1989
2022-03-31 19:29:51 +08:00
for 循环效率最高
hepin1989
2022-03-31 19:35:49 +08:00
import java.util.Objects._
def sum(ints:Int *):Int = ints.filter(nonNull).sum

sum(1,2,3,4)
hepin1989
2022-03-31 19:36:10 +08:00
hepin1989
2022-03-31 19:38:12 +08:00
def sum(ints:Int *):Int =
(for(intValue <- ints if intValue ne null) yield intValue).sum
pengtdyd
2022-03-31 19:39:55 +08:00
我记得阿里巴巴 java 开发手册里面有这么一句话,调用者应该负责参数的校验,谁调用谁负责,所以有 null 应该由调用者处理吧
hepin1989
2022-03-31 19:43:32 +08:00
def sum(ints:Integer *):Int =
ints.foldLeft(0)((a, b) => if (b eq null) a else a + b)
Leviathann
2022-03-31 19:44:43 +08:00
@Cbdy void func(Integer ...args) { System.out.println(args.toString()); }

直接 func() 调用都没问题,args 不可能为 null ,怎么导致 stream 报错

如果是直接传一个 null 参数,那在调用的地方就爆了和函数里面用什么方法处理也没关系
hepin1989
2022-03-31 19:45:45 +08:00
public static BigInteger sum(Integer ... ints) {
BigInteger sum = BigInteger.ZERO;
for (Integer anInt : ints) {
if (anInt != null) {
sum = sum.add(BigInteger.valueOf(anInt));
}
}
return sum;
}
anzu
2022-03-31 20:17:43 +08:00
@Leviathann 你确定?这里输出 args is null 后报错

public class MyClass {
public static void main(String args[]) {
Integer[] arr = null;
func(arr);
}
static void func(Integer ...args) {
if (args == null) {
System.out.println("args is null");
}
System.out.println(args.toString());
}
}
Leviathann
2022-03-31 20:29:43 +08:00
@anzu 的确 我看走眼了,回去翻了下 jshell 运行记录,由于函数体偷懒没写,而调用时那一长串文字原来是警告不是异常,
再次说明 2022 年还在使用一门连空安全都做不到的语言实在是浪费生命
Cbdy
2022-03-31 20:29:53 +08:00
@Leviathann 36L 给出了可能为 null 的情况,我在 14L 给给出了我的答案,你可以注意一下到我加的两个注解
lawler
2022-03-31 22:50:26 +08:00
至此,没有我认同的最佳答案,相反都是最差的回答。最优不等于语法糖。
lawler
2022-03-31 22:50:33 +08:00
public static int sum(Integer num, Integer... nums) {
int result = num == null ? 0 : num;
for (int i = 0; i < (nums == null ? 0 : nums.length); i++) {
result += sum(nums[i]);
}
return result;
}

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

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

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

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

© 2021 V2EX