Lov*_*vey 4 lambda optional java-8
我有一个列表,其中有50个值.现在我有3个匹配条件,但匹配条件有一些顺序.与P1条件一样,我必须首先匹配,如果它在任何元素中都不匹配,那么应该为逻辑评估第二个条件,依此类推.如何使用Java 8和orElseGet链接来完成此操作.
我正在考虑使用orElseGet,但它需要供应商.
请让我知道怎么做.
最简单的方法是首先迭代条件:
Stream.<Predicate<String>>of("AB"::equals, "DC"::equals,"XY"::equals)
.flatMap(condition -> test.stream().filter(condition).limit(1))
.findFirst()
.orElse(test.get(0));
Run Code Online (Sandbox Code Playgroud)
当然,因为在您的示例中,所有条件都与字符串匹配,您可以更简单地做到这一点,但我认为您的意思是询问一般情况.
您也可以这样做orElseGet:
test.stream().filter("AB"::equals).findFirst()
.map(Optional::of).orElseGet(() -> test.stream().filter("DC"::equals).findFirst())
.map(Optional::of).orElseGet(() -> test.stream().filter("XY"::equals).findFirst())
.orElse(test.get(0));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3924 次 |
| 最近记录: |