java 流 api 中中断和继续的模拟?
Analogue of break and continue in java stream api?
- 是否可以类推中断线程(streamapi)的执行
用 break?
for (int i = 0; i < 10; i++) {
if (i == 4) {
break;
}
}
- 是否可以跳过像 continue 这样的流程元素?
for (int i = 0; i < 10; i++) {
if (i == 4) {
continue;
}
}
也许使用 takeWhile
或 filter
?
在不同的情况下,break
和 continue
可以用在 for 循环中。有一些用流 API.
替换的情况
打破无效项目的循环
在这种情况下,在 for 循环的开头使用 Break 来在找到带有谓词的项目时停止循环。
从Java-9开始你可以使用takeWhile
方法,在for循环的条件下逻辑上类似于break
:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Stream.html#takeWhile(java.util.function.Predicate)
例如此代码:
for (String item : list) {
if (item.isEmpty()) {
break;
}
processItem(item);
}
可以更改为流版本:
list.stream()
.takeWhile(item -> !item.isEmpty())
.forEach(item -> processItem(item));
注意这个注意事项:
If this stream is unordered, and some (but not all) elements of this stream match the given predicate, then the behavior of this operation is nondeterministic
继续循环过滤掉元素
Continue 用于 for 循环的开头,用于过滤一些项目。
对于某些continue
的情况,您可以采用filter
流方法:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Stream.html#filter(java.util.function.Predicate)
For 循环代码 continue
:
for (String item : list) {
if (item.isEmpty()) {
continue;
}
processItem(item);
}
流 filter
:
list.stream()
.filter(item -> !item.isEmpty())
.forEach(item -> processItem(item));
- 是否可以类推中断线程(streamapi)的执行 用 break?
for (int i = 0; i < 10; i++) {
if (i == 4) {
break;
}
}
- 是否可以跳过像 continue 这样的流程元素?
for (int i = 0; i < 10; i++) {
if (i == 4) {
continue;
}
}
也许使用 takeWhile
或 filter
?
在不同的情况下,break
和 continue
可以用在 for 循环中。有一些用流 API.
打破无效项目的循环
在这种情况下,在 for 循环的开头使用 Break 来在找到带有谓词的项目时停止循环。
从Java-9开始你可以使用takeWhile
方法,在for循环的条件下逻辑上类似于break
:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Stream.html#takeWhile(java.util.function.Predicate)
例如此代码:
for (String item : list) {
if (item.isEmpty()) {
break;
}
processItem(item);
}
可以更改为流版本:
list.stream()
.takeWhile(item -> !item.isEmpty())
.forEach(item -> processItem(item));
注意这个注意事项:
If this stream is unordered, and some (but not all) elements of this stream match the given predicate, then the behavior of this operation is nondeterministic
继续循环过滤掉元素
Continue 用于 for 循环的开头,用于过滤一些项目。
对于某些continue
的情况,您可以采用filter
流方法:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Stream.html#filter(java.util.function.Predicate)
For 循环代码 continue
:
for (String item : list) {
if (item.isEmpty()) {
continue;
}
processItem(item);
}
流 filter
:
list.stream()
.filter(item -> !item.isEmpty())
.forEach(item -> processItem(item));