Luc*_*ess 21 java lambda functional-programming nested-if java-8
我有以下代码,并希望使用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用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());
Run Code Online (Sandbox Code Playgroud)
Mar*_*nik 48
这里的基本观察是你的问题涉及非同构变换:单个输入元素可以映射到零个,一个或两个输出元素.每当你注意到这一点时,你应该立即开始寻找一个解决方案,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());
Run Code Online (Sandbox Code Playgroud)
你可以为lambda声明一个body.例如:
Runnable run = () -> System.out.println("Hey");
Run Code Online (Sandbox Code Playgroud)
可能
Runnable run = () -> {
System.out.println("Hey");
};
Run Code Online (Sandbox Code Playgroud)
在该主体中,您可以创建嵌套语句:
Runnable run = () -> {
int num = 5;
if(num == 5) {
System.out.println("Hey");
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46754 次 |
| 最近记录: |