gpt4 book ai didi

java - 如何使用 Java 8/lambda 执行嵌套的 'if' 语句?

转载 作者:IT老高 更新时间:2023-10-28 20:43:42 26 4
gpt4 key购买 nike

我有以下代码,并想使用 lambda 函数来实现它,只是为了好玩。可以使用基本的聚合操作来完成吗?

List<Integer> result = new ArrayList<>();

for (int i = 1; i <= 10; i++) {
if (10 % i == 0) {
result.add(i);
if (i != 5) {
result.add(10 / i);
}
}
}

使用 lambda:

List<Integer> result = IntStream.rangeClosed(1, 10)
.boxed()
.filter(i -> 10 % i == 0)
// a map or forEach function here?
// .map(return 10 / i -> if i != 5)
.collect(Collectors.toList());

最佳答案

这里的基本观察是您的问题涉及非同构转换:单个输入元素可能映射到零、一个或两个输出元素。每当您注意到这一点时,您应该立即开始寻找涉及 flatMap 而不是 map 的解决方案,因为这是实现这种通用转换的唯一方法。在您的特定情况下,您可以首先将 filter 应用于一对零元素映射,然后将 flatMap 应用于一对二映射:

List<Integer> result =
IntStream.rangeClosed(1, 10)
.filter(i -> 10 % i == 0)
.flatMap(i -> i == 5 ? IntStream.of(i) : IntStream.of(i, 10 / i))
.boxed()
.collect(toList());

(假设 import static java.util.stream.Collectors.toList)

关于java - 如何使用 Java 8/lambda 执行嵌套的 'if' 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31629324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com