Java 8流优先级过滤
发布时间:2020-12-15 08:27:42 所属栏目:Java 来源:网络整理
导读:我的代码看起来像: for (SomeObject object : objects) { if (object.getSomething() == Something.SomethingHighPriority) { return object; }}for (SomeObject object : objects) { if (object.getSomething() == Something.SomethingLowPriority) { retu
我的代码看起来像:
for (SomeObject object : objects) { if (object.getSomething() == Something.SomethingHighPriority) { return object; } } for (SomeObject object : objects) { if (object.getSomething() == Something.SomethingLowPriority) { return object; } } 它用于通过某种条件获取集合中的第一个元素.此外,优先考虑也很重要.我首先需要寻找一个元素,如果它不存在则寻找第二个元素. 我想用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); 是否可以减少样板? 解决方法
您可以链接两个管道:
return objects.stream() .filter(object -> object.getSomething() == Something.SomethingHighPriority) .findFirst() .orElseGet(() -> objects.stream() .filter(object -> object.getSomething() == Something.SomethingLowPriority) .findFirst() .orElse(null)); 另一种方法是按降序对object.getSomething()对Stream进行排序,然后返回第一个元素(如果它具有两个必需值中的一个),但是这将采用效率较低的O(NlogN). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |