我有一个列表,其中有50个值。现在我有3个匹配条件,但匹配条件有一些顺序。与P1条件类似,我必须先匹配,如果它在任何元素中都不匹配,那么应该为逻辑评估第二个条件,依此类推。如何使用Java 8和orElseGet
链接来完成此操作。
我正在考虑使用orElseGet
,但它需要供应商。
请让我知道怎么做。
答案 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));