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可能与第二个条件匹配,如果同样失败,您将希望搜索与第三个条件匹配的元素。是否正确?这将不起作用…可能我忘了说列表没有排序,因此如果筛选器首先与第二个条件匹配,它将返回项