메소드의 반환형 또는 매개변수에 자료형으로 제네릭을 사용한 클래스(인터페이스)를 작성할 경우 메소드 반환형 앞에 사용할 제네릭을 생성하여 메소드 작성
- 함수형 인터페이스에서 사용
public static <T> void 메소드명(매개변수<T> a, 매개변수<T> b){ for(T t : a){ b.메소드(t); } }
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "[" + name + ", " + age + "]";
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
public class PersonApp {
// 메소드의 반환형 또는 매개변수에 자료형으로 제네릭을 사용한 클래스(인터페이스)를 작성할 경우 메소드 반환형
// 앞에 사용할 제네릭을 생성하여 메소드 작성
public static <T> void forEach(List<T> list, Consumer<T> c) {
for(T t : list) {
c.accept(t);
}
System.out.println();
}
public static <T> List<T> fillter(List<T> list, Predicate<T> predicate) {
// List 객체를 반환
List<T> result = new ArrayList<>();
for(T t : list) {
// 조건을 boolean(test)메소드로 호출하고 personList 안에 있는 배열 하나씩 검사
if(predicate.test(t)) {
result.add(t);
}
}
return result;
}
public static void main(String[] args) {
forEach(Arrays.asList("홍길동", "임꺽정", "전우치"), str -> System.out.print(str + " "));
// List.of(E... element): 매개변수로 전달받은 0개 이상의 객체가 요소값으로 저장된
// List 객체를 반환하는 정적메소드
forEach(List.of("홍길동", "임꺽정", "전우치"), str -> System.out.print(str + " "));
System.out.println("=========================================");
List<Person> personList = new ArrayList<>();
personList.add(new Person("홍길동", 50));
personList.add(new Person("임꺽정", 29));
personList.add(new Person("전우치", 35));
System.out.println(personList);
System.out.println("=========================================");
List<Person> thirtyList = fillter(personList, person -> person.getAge() >= 30);
System.out.println(thirtyList);
System.out.println("=========================================");
}
}