看别人寫的用法真蛋疼。
主要自己定義Predicate的與或運算
code
public Predicate mypredicateand(Predicate predicate1, Predicate predicate2) {
Objects.requireNonNull(predicate2);
return (x) -> predicate1.test(x) && predicate2.test(x);
}
public Predicate mypredicateor(Predicate predicate1, Predicate predicate2) {
Objects.requireNonNull(predicate2);
return (x) -> predicate1.test(x) || predicate2.test(x);
}
test
@Test
public void testMyPredicateand() {
Predicate<String> predicate1 = new Predicate<String>() {
@Override
public boolean test(String o) {
return o.length() >= 5;
}
};
Predicate<String> predicate2 = new Predicate<String>() {
@Override
public boolean test(String s) {
return s.length() <= 7;
}
};
Predicate<String> predicate = mypredicateand(predicate1, predicate2);
List<String> list = new ArrayList<>();
list.add("a");
list.add("OTHKJ");
list.add("12345678");
list.add("12345");
list.add("123876533");
list.add("123");
System.out.println(list);
Object[] result = list.stream().filter(predicate).toArray();
for (Object obj : result)
System.out.println(obj);
}
@Test
public void testMyPredicateor() {
Predicate<String> predicate1 = new Predicate<String>() {
@Override
public boolean test(String o) {
return o.length() < 5;
}
};
Predicate<String> predicate2 = new Predicate<String>() {
@Override
public boolean test(String s) {
return s.length() > 7;
}
};
Predicate<String> predicate = mypredicateor(predicate1, predicate2);
List<String> list = new ArrayList<>();
list.add("a");
list.add("OTHKJ");
list.add("12345678");
list.add("12345");
list.add("123876533");
list.add("123");
System.out.println(list);
Object[] result = list.stream().filter(predicate).toArray();
for (Object obj : result)
System.out.println(obj);
}
result
[a, OTHKJ, 12345678, 12345, 123876533, 123]
OTHKJ
12345
[a, OTHKJ, 12345678, 12345, 123876533, 123]
a
12345678
123876533
123
版權聲明:本文為CSDN部落客「weixin_33975951」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/weixin_33975951/article/details/92516497