Java/JAVA8

[자바] 함수형 인터페이스(Predicate)

달의요정루나 2021. 7. 18. 00:25

Predicate

- java.util.function.Predicate<T> 인터페이스는 test라는 추상 메서드를 정의하며 test는 제너릭 형식 T의 객체를 인수로 받아 boolean을 반환.

- Person 클래스(인터페이스에 들어갈 변수들 입니다.)

public class Person {
	private String firstName;
	private String lastName;
	private String job;
	private String gender;
	private int age;
	private int salary;
	
	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getSalary() {
		return salary;
	}

	public void setSalary(int salary) {
		this.salary = salary;
	}

	public Person(String firstName, String lastName, String job, String gender, int age, int salary) {
		this.firstName=firstName;
		this.lastName=lastName;
		this.job=job;
		this.gender=gender;
		this.age=age;
		this.salary=salary;
	}
	
	@Override
	public String toString() {
		return "Developer [name = " + firstName +" "+lastName+", job = "+job+", gender = "
				+gender+ ", age = " +age+", salary = " +salary+"]\n";
	}
}

- Predicate 예시문

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Predicate;

public class JavaTest {
	
	public static Predicate<Person> predicate1() {
		return str -> str.getAge() > 21 && str.getGender().equals("male");
	}// 나이가 21살보다 많고 남성인 경우 출력
	
	public static Predicate<Person> predicate2() {
		return str -> str.getAge() > 18 && str.getGender().equals("female");
	}//나이가 18보다 많고 여성인 경우 출력
	
	public static Predicate<Person> predicate3(Integer age) {
		return str -> str.getAge() > age; 
	}//나이가 지정된 값보다 작은 경우(매개변수로 나이) 출력
    
    public static void main(String[] args) {
		List<Person> results = new ArrayList<Person>();
		
		results.add(new Person("Elsdon", "Jaycob","Java programmer","male",43,2000));
		results.add(new Person("Tamsen", "Brittany","Java programmer","female",23,1500));
		results.add(new Person("Floyd", "Donny","Java programmer","male",33,1800));
		results.add(new Person("Sindy", "Jonie","Java programmer","female",32,1600));
		results.add(new Person("Vere", "Hervey","Java programmer","male",22,1200));
		results.add(new Person("Maude", "Jaimie","Java programmer","female",27,1900));
		results.add(new Person("Shawn", "Randall","Java programmer","male",30,2300));
		results.add(new Person("Jayden", "Corrina","Java programmer","female",35,1700));
		results.add(new Person("Palmer", "Dene","Java programmer","male",33,2000));
		results.add(new Person("Addison", "Pam","Java programmer","female",34,1300));
		
		results.add(new Person("Jarrod", "Pace","PHP programmer","male",34,1550));
		results.add(new Person("Clarette", "Cicely","PHP programmer","female",23,1200));
		results.add(new Person("Victor", "Channing","PHP programmer","male",32,1600));
		results.add(new Person("Tori", "Sheryl","PHP programmer","female",21,1000));
		results.add(new Person("Osborne", "Shad","PHP programmer","male",32,1100));
		results.add(new Person("Rosalind", "Layla","PHP programmer","female",25,1300));
		results.add(new Person("Fraser", "Hewie","PHP programmer","male",36,1100));
		results.add(new Person("Quinn", "Tamara","PHP programmer","female",21,1000));
		results.add(new Person("Alvin", "Lance","PHP programmer","male",38,1600));
		results.add(new Person("Evonne", "Shari","PHP programmer","female",40,1800));

		results.stream().filter(predicate1()).forEach(System.out::println);
		results.stream().filter(predicate2()).forEach(System.out::println);		
		results.stream().filter(predicate3(22)).forEach(System.out::println);
        //predicate 함수를 통해 필터링되어지고 결과를 출력한다.
        }

}

- 결과(predicate1)

더보기

Developer [name = Shawn Randall, job = Java programmer, gender = male, age = 30, salary = 2346]

Developer [name = Elsdon Jaycob, job = Java programmer, gender = male, age = 43, salary = 2040]

Developer [name = Palmer Dene, job = Java programmer, gender = male, age = 33, salary = 2040]

Developer [name = Floyd Donny, job = Java programmer, gender = male, age = 33, salary = 1836]

Developer [name = Alvin Lance, job = PHP programmer, gender = male, age = 38, salary = 1648]

Developer [name = Victor Channing, job = PHP programmer, gender = male, age = 32, salary = 1648]

Developer [name = Jarrod Pace, job = PHP programmer, gender = male, age = 34, salary = 1596]

Developer [name = Vere Hervey, job = Java programmer, gender = male, age = 22, salary = 1224]

Developer [name = Fraser Hewie, job = PHP programmer, gender = male, age = 36, salary = 1133]

Developer [name = Osborne Shad, job = PHP programmer, gender = male, age = 32, salary = 1133]

 

- 결과(predicate2)

더보기

Developer [name = Maude Jaimie, job = Java programmer, gender = female, age = 27, salary = 1938]

Developer [name = Evonne Shari, job = PHP programmer, gender = female, age = 40, salary = 1854]

Developer [name = Jayden Corrina, job = Java programmer, gender = female, age = 35, salary = 1734]

Developer [name = Sindy Jonie, job = Java programmer, gender = female, age = 32, salary = 1632]

Developer [name = Tamsen Brittany, job = Java programmer, gender = female, age = 23, salary = 1530]

Developer [name = Rosalind Layla, job = PHP programmer, gender = female, age = 25, salary = 1339]

Developer [name = Addison Pam, job = Java programmer, gender = female, age = 34, salary = 1326]

Developer [name = Clarette Cicely, job = PHP programmer, gender = female, age = 23, salary = 1236]

Developer [name = Quinn Tamara, job = PHP programmer, gender = female, age = 21, salary = 1030]

Developer [name = Tori Sheryl, job = PHP programmer, gender = female, age = 21, salary = 1030]

 

- 결과(predicate3)

더보기

Developer [name = Shawn Randall, job = Java programmer, gender = male, age = 30, salary = 2346]

Developer [name = Elsdon Jaycob, job = Java programmer, gender = male, age = 43, salary = 2040]

Developer [name = Palmer Dene, job = Java programmer, gender = male, age = 33, salary = 2040]

Developer [name = Maude Jaimie, job = Java programmer, gender = female, age = 27, salary = 1938]

Developer [name = Evonne Shari, job = PHP programmer, gender = female, age = 40, salary = 1854]

Developer [name = Floyd Donny, job = Java programmer, gender = male, age = 33, salary = 1836]

Developer [name = Jayden Corrina, job = Java programmer, gender = female, age = 35, salary = 1734]

Developer [name = Alvin Lance, job = PHP programmer, gender = male, age = 38, salary = 1648]

Developer [name = Victor Channing, job = PHP programmer, gender = male, age = 32, salary = 1648]

Developer [name = Sindy Jonie, job = Java programmer, gender = female, age = 32, salary = 1632]

Developer [name = Jarrod Pace, job = PHP programmer, gender = male, age = 34, salary = 1596]

Developer [name = Tamsen Brittany, job = Java programmer, gender = female, age = 23, salary = 1530]

Developer [name = Rosalind Layla, job = PHP programmer, gender = female, age = 25, salary = 1339]

Developer [name = Addison Pam, job = Java programmer, gender = female, age = 34, salary = 1326]

Developer [name = Clarette Cicely, job = PHP programmer, gender = female, age = 23, salary = 1236]

Developer [name = Fraser Hewie, job = PHP programmer, gender = male, age = 36, salary = 1133]

Developer [name = Osborne Shad, job = PHP programmer, gender = male, age = 32, salary = 1133]