Ole*_*nyk 5 java java-8 java-stream
我的代码看起来像:
for (SomeObject object : objects) {
if (object.getSomething() == Something.SomethingHighPriority) {
return object;
}
}
for (SomeObject object : objects) {
if (object.getSomething() == Something.SomethingLowPriority) {
return object;
}
}
Run Code Online (Sandbox Code Playgroud)
它用于通过某种条件获取集合中的第一个元素.此外,优先考虑也很重要.我首先需要寻找一个元素,如果它不存在则寻找第二个元素.
我想用Stream API重写它,但我知道只使用了一次流.现在我用这种方式重写了它,但它似乎比以前更难看.
Optional<SomeObject> object =
objects.stream()
.filter(object -> object.getSomething() == Something.SomethingHighPriority)
.findFirst();
if (object.isPresent()) {
return object.get();
}
object = objects.stream()
.filter(object -> object.getSomething() == Something.SomethingLowPriority)
.findFirst();
// No other use cases
return object.orElse(null);
Run Code Online (Sandbox Code Playgroud)
是否可以减少样板?
您可以链接两个管道:
return objects.stream()
.filter(object -> object.getSomething() == Something.SomethingHighPriority)
.findFirst()
.orElseGet(() -> objects.stream()
.filter(object -> object.getSomething() == Something.SomethingLowPriority)
.findFirst()
.orElse(null));
Run Code Online (Sandbox Code Playgroud)
另一种方法是Stream按object.getSomething()降序对by 进行排序,然后返回第一个元素(如果它具有两个必需值中的一个),但这样做O(NlogN)效率会降低.
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |