⭐️ Consumer 인터페이스
package java.util.function;
import java.util.Objects;
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
accept 메서드는 하나의 인수를 받아 소비한다. (return 타입이 void)
andThen을 통해 chaining을 할 수 있다.
🌱 Consumer 예시
package com.learnJava.functionalInterfaces;
import com.learnJava.data.Student;
import com.learnJava.data.StudentDataBase;
import java.util.List;
import java.util.function.Consumer;
public class ConsumerExample {
static Consumer<Student> c2 = (student) -> System.out.println(student);
static Consumer<Student> c3 = (student) -> System.out.print(student.getName());
static Consumer<Student> c4 = (student) -> System.out.println(student.getActivities());
public static void printName() {
List<Student> studentList = StudentDataBase.getAllStudents();
studentList.forEach(c2);
}
public static void printNameAndActivities() {
System.out.println("printNameAndActivities: ");
List<Student> studentList = StudentDataBase.getAllStudents();
studentList.forEach(c3.andThen(c4));
}
public static void printNameAndActivitiesUsingCondition() {
System.out.println("printNameAndActivitiesUsingCondition: ");
List<Student> studentList = StudentDataBase.getAllStudents();
studentList.forEach((student) -> {
if (student.getGradeLevel()>=3 && student.getGpa() >= 3.9) {
c3.andThen(c4).accept(student);
}
});
}
public static void main(String[] args) {
Consumer<String> c1 = s -> System.out.println(s.toUpperCase());
c1.accept("java8");
printName();
printNameAndActivities();
printNameAndActivitiesUsingCondition();
}
}
forEach : Consumer를 인자로 받음
andThen : andThen을 사용하여 여러 Consumer를 연결해서 사용할 수 있음 consumer chaining
⭐️ BiConsumer 인터페이스
package java.util.function;
import java.util.Objects;
@FunctionalInterface
public interface BiConsumer<T, U> {
void accept(T t, U u);
default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U> after) {
Objects.requireNonNull(after);
return (l, r) -> {
accept(l, r);
after.accept(l, r);
};
}
}
🌱 BiConsumer 예시
package com.learnJava.functionalInterfaces;
import com.learnJava.data.Student;
import com.learnJava.data.StudentDataBase;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiConsumer;
public class BiConsumerExample {
public static void nameAndActivities() {
BiConsumer<String, List<String>> biConsumer = (name, activities) -> System.out.println(name + ": " + activities);
List<Student> studentList = StudentDataBase.getAllStudents();
studentList.forEach((student -> biConsumer.accept(student.getName(), student.getActivities())));
}
public static void main(String[] args) {
BiConsumer<String, String> biConsumer = (a, b) -> {
System.out.println("a : " + a + ", b : " + b);
};
biConsumer.accept("java7", "java8");
BiConsumer<Integer, Integer> multiply = (a, b) -> {
System.out.println("Multiplication is : " + (a * b));
};
BiConsumer<Integer, Integer> division = (a, b) -> {
System.out.println("Division is : " + (a/b));
};
multiply.andThen(division).accept(10, 5);
nameAndActivities();
}
}