OrElseGet链接Java8

时间:2015-06-09 22:41:15

标签: lambda java-8 optional

我有一个列表,其中有50个值。现在我有3个匹配条件,但匹配条件有一些顺序。与P1条件类似,我必须先匹配,如果它在任何元素中都不匹配,那么应该为逻辑评估第二个条件,依此类推。如何使用Java 8和orElseGet链接来完成此操作。

我正在考虑使用orElseGet,但它需要供应商。

请让我知道怎么做。

1 个答案:

答案 0 :(得分:6)

最简单的方法是首先迭代条件:

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));