OrElseGet 链接 Java8

OrElseGet chaining in Java8

我有一个列表,其中有 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));