OrElseGet链接Java8

Lov*_*vey 4 lambda optional java-8

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

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

请让我知道怎么做.

Mis*_*sha 6

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

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)