【发布时间】:2020-08-13 08:16:54
【问题描述】:
我有一个数组 [1,2,3,4,5] 并且想做这样的事情。
创建一个新数组,其中所有小于 3 的元素都将变为负数,而大于等于 3 的所有元素将保持不变。如果没有低于 3 的元素,那么在这种情况下我必须抛出错误。
所以在这种情况下,新数组将是 [ -1, -2, 3, 4, 5]。
如何使用 lambda, filter 来做到这一点?
这是我的一段代码
AtomicInteger a = new AtomicInteger(0);
arrayList.stream()
.map(data -> {
if(data < 3) {a.getAndIncrement(); return -1 * data;}
return data;
})
.collect(Collectors.toList());
if(a.get() == 0) {
throw new RuntimeException();
}
【问题讨论】:
-
我不想使用 Atomic Interger
-
但你做到了......
-
只是一个小观察:在计算中,使用特定和精确的语言很重要,因为小的误解可能会导致大问题。你说你有一个数组,但实际上你有一个 ArrayList。它们是两种不同的东西。当您的意思是“抛出异常”时,您还说“抛出错误”。 Error 是 Throwable 的一个类,它是 not Exception。
-
没有什么说你必须使用流(假设这不是家庭作业)。仅仅因为流的存在并不意味着它们应该替换程序中的每个循环。如果循环更容易实现、读取和维护,或者如果使用流需要您对抗 API,则使用循环。
标签: java lambda java-stream