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));
当然,因为在您的示例中,所有条件都与字符串匹配,您可以更简单地做到这一点,但我认为您的意思是询问一般情况.
您也可以这样做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));
| 归档时间: | 
 | 
| 查看次数: | 3924 次 | 
| 最近记录: |