Java 8流筛选器返回第一个条件满足

Java 8流筛选器返回第一个条件满足,java,java-stream,Java,Java Stream,我想知道如何从数组中获取与第一个条件匹配的项 Predicate<String> pCond1 = i -> i.equalsIgnoreCase("c"); Predicate<String> pCond2 = i -> i.equalsIgnoreCase("e"); Predicate<String> pCond3 = i -> i.equalsIgnoreCase("b");

我想知道如何从数组中获取与第一个条件匹配的项

Predicate<String> pCond1 = i -> i.equalsIgnoreCase("c");
Predicate<String> pCond2 = i -> i.equalsIgnoreCase("e");
Predicate<String> pCond3 = i -> i.equalsIgnoreCase("b");
            
Optional<String> result = list.stream()
            .filter(pCond1.or(pCond2).or(pCond3))
            .findFirst();
例如: 假设我有一个字符串列表

列表={“a”、“b”、“c”、“d”、“e”}

和一份条件清单

Predicate<String> pCond1 = i -> i.equalsIgnoreCase("c");
Predicate<String> pCond2 = i -> i.equalsIgnoreCase("e");
Predicate<String> pCond3 = i -> i.equalsIgnoreCase("b");
            
Optional<String> result = list.stream()
            .filter(pCond1.or(pCond2).or(pCond3))
            .findFirst();
cond1=“c”

cond2=“e”

cond3=“b”

我的问题是在java流中,如何获得满足第一个条件的第一个元素

差不多

if(cond1 found)
  return first element 
else if (cond2 found)
  return first element 
else if (cond3 found)
  return first element
我试着用谓词来做,但它似乎从任意条件返回元素

Predicate<String> pCond1 = i -> i.equalsIgnoreCase("c");
Predicate<String> pCond2 = i -> i.equalsIgnoreCase("e");
Predicate<String> pCond3 = i -> i.equalsIgnoreCase("b");
            
Optional<String> result = list.stream()
            .filter(pCond1.or(pCond2).or(pCond3))
            .findFirst();
谓词pCond1=i->i.equalsIgnoreCase(“c”);
谓词pCond2=i->i.equalsIgnoreCase(“e”);
谓词pCond3=i->i.equalsIgnoreCase(“b”);
可选结果=list.stream()
.过滤器(pCond1.或(pCond2.或(pCond3))
.findFirst();
更新

我忘了说名单上没有排序

所以这个列表可以是

列表={“e”、“c”、“a”、“d”、“b”}

这个例子的结果应该是“c”,因为c是匹配的第一个条件

另一个例子

列表={“e”、“a”、“d”、“b”}


结果应该是“e”,因为条件c失败,但第二个条件“e”匹配

我认为应该是这样的:

Optional<String> result = list.stream().filter(s ->s.equals("c") || s.equals("e") || s.equals("b")).findFirst();
Optional result=list.stream().filter(s->s.equals(“c”)| | s.equals(“e”)| | s.equals(“b”).findFirst();

如果条件不满足,结果将为空。

可以这样做:

Optional=Stream.of(pCond1、pCond2、pCond3)
.map(条件->列表.stream()
.过滤器(条件)
.findAny()
.orElse(空))
.filter(对象::非空)
.findFirst();

它对所有条件进行流式处理,如果找到它,则将其映射到一个值,否则会将其过滤掉。这确保如果满足条件,则第一个条件的结果始终在流中的第一个。最后,
findFirst()
确保返回与第一个条件匹配的结果。

您的描述似乎与示例不匹配,这使您的问题令人困惑。你真的想找到“匹配第一个条件的项目”(因此我假设如果有很多条件,我们只需要关注第一个条件)还是更像“匹配任何条件的第一个项目”?那么你能澄清你期望的结果(包括你的逻辑)和你得到的结果吗(为什么你认为这是不正确的)?正如我写的,我想要匹配第一个条件的项。我没有写,我对此表示歉意。我用伪代码写了逻辑,只是检查我是否理解。你想首先检查整个列表以搜索匹配第一个条件的元素。如果找不到任何匹配项,你想搜索ch可能与第二个条件匹配,如果同样失败,您将希望搜索与第三个条件匹配的元素。是否正确?这将不起作用…可能我忘了说列表没有排序,因此如果筛选器首先与第二个条件匹配,它将返回项