lambda - OrElse在 Java8 中获取链接

标签 lambda java-8 option-type

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

关于lambda - OrElse在 Java8 中获取链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30744068/

相关文章:

c++ - 能够在 lambda 中使用非捕获局部变量的编译时特性有什么意义?

C++11 性能 : Lambda inlining vs Function template specialization

c++ - 等效于使用 lambda 的 python 映射函数

c++ - "std::decay_t<U> (until C++20) std::remove_cvref_t<U> (since C++20)"是什么意思?

c++ - 是否可以在 vector 的构造函数中使用 lambda 函数?

java - Java8 上的命名参数

java - 使用 Java 8 流计算加权平均值

java - 需要有关 Java 1.8 的帮助 可选 map

Swift:让详细 View Controller 知道数组可能存在也可能不存在

java - Apache Ant 1.9.4 与 Java 1.8 的兼容性