Lambda Java8中的OrelGet链接

Lambda Java8中的OrelGet链接,lambda,java-8,optional,Lambda,Java 8,Optional,我有一个列表,其中有50个值。现在我有3个匹配条件,但是匹配条件有一些顺序。就像P1条件一样,我必须首先匹配,如果它在任何元素中都不匹配,那么应该对第二个条件进行逻辑求值,以此类推。如何使用Java8和orElseGet链接实现这一点 我正在考虑使用orElseGet,但它需要一个供应商 请告诉我如何操作。最简单的方法是首先迭代条件: Stream.<Predicate<String>>of("AB"::equals, "DC"::equals,"XY"::equals)

我有一个列表,其中有50个值。现在我有3个匹配条件,但是匹配条件有一些顺序。就像P1条件一样,我必须首先匹配,如果它在任何元素中都不匹配,那么应该对第二个条件进行逻辑求值,以此类推。如何使用Java8和
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));

您应该向我们展示一些代码我认为您可以使用一个比较器计算所有三个谓词,然后得到min()List test=new ArrayList();测试。添加(“AB”);测试。添加(“DC”);测试。添加(“PQ”);测试。添加(“EF”);现在我想检查测试中的任何AB,如果是,则获取它;如果不是,则检查测试中的任何DC(匹配get);如果不是,则获取EF;否则,将执行默认操作,即:从测试中获取(0)。@Misha:某种程度上,Or运算符是否会在上述情况下工作???。我在考虑一个解决方案,如果我们能利用orElseGet进入连锁店。和默认值或仅限LSE。@the8472:谢谢回复。你能给我们看一些示例代码或例子吗。
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));