原创转载请注明出处:http://agilestyle.iteye.com/blog/2424767
Predicate
Predicate是一个谓词函数,主要作为一个谓词演算推导真假值存在,返回布尔值。
e.g.
package org.fool.java8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiPredicate;
import java.util.function.IntPredicate;
import java.util.function.Predicate;
public class PredicateTest {
private static List<Person> filter(List<Person> persons, Predicate<Person> predicate) {
List<Person> result = new ArrayList<>();
for (Person person : persons) {
if (predicate.test(person)) {
result.add(person);
}
}
return result;
}
private static List<Person> filterByAge(List<Person> persons, IntPredicate predicate) {
List<Person> result = new ArrayList<>();
for (Person person : persons) {
if (predicate.test(person.getAge())) {
result.add(person);
}
}
return result;
}
private static List<Person> filterByNameAndAge(List<Person> persons, BiPredicate<String, Integer> predicate) {
List<Person> result = new ArrayList<>();
for (Person person : persons) {
if (predicate.test(person.getName(), person.getAge())) {
result.add(person);
}
}
return result;
}
private static class Person {
private String name;
private Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public static void main(String[] args) {
List<Person> list = Arrays.asList(
new Person("zhangsan", 18),
new Person("lisi", 28));
filter(list, person -> person.getAge().equals(18)).forEach(System.out::println);
filterByAge(list, age -> age > 18).forEach(System.out::println);
filterByNameAndAge(list, (name, age) -> name.equals("zhangsan") && age < 28).forEach(System.out::println);
}
}
Console Output
Person{name='zhangsan', age=18}
Person{name='lisi', age=28}
Person{name='zhangsan', age=18}