728x90
반응형
SMALL
🤖 자바 8부터 빈번하게 사용되는 함수적 인터페이스는
java.util.function 표준 API 패키지로 제공한다.
이 패키지에서 제공하는 함수적 인터페이스의 목적은
메소드 또는 생성자의 매개 타입으로 사용되어 람다식을 대입할 수 있도록 하기 위해서이다.
*패키지의 함수적 인터페이스5가지
예제를 보며 이해하자
*Consumer
package lamdaCons;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.DoubleConsumer;
import java.util.function.ObjDoubleConsumer;
import java.util.function.ObjIntConsumer;
public class ConsumerExample {
public static void main(String[] args) {
Consumer<String> consumer=t -> System.out.println(t+"8");
consumer.accept("java");
BiConsumer<String, String>bigConsumer=(t,u)->System.out.println(t+u);
bigConsumer.accept("java", "8");
DoubleConsumer doubleConsumer=d->System.out.println("java"+d);
doubleConsumer.accept(8.0);
ObjIntConsumer<String> objIntConsumer=(t,i)-> System.out.println(t+i);
objIntConsumer.accept("java", 8);
}
}
*Supplier
package lamdaSuppl;
import java.util.function.IntSupplier;
public class SupplierExample {
public static void main(String[] args) {//리턴값만 존재
IntSupplier intSupplier=()->{
int num=(int)(Math.random()*6)+1;
return num;
};
int num=intSupplier.getAsInt();
System.out.println("눈의 수: "+num );
}
}
*Function
package lamdaFunc;
public class Student {
private String name;
private int englishScore;
private int mathScore;
public Student(String name, int englishScore, int mathScore) {
this.name = name;
this.englishScore = englishScore;
this.mathScore = mathScore;
}
public String getName() {
return name;
}
public int getEnglishScore() {
return englishScore;
}
public int getMathScore() {
return mathScore;
}
}
package lamdaFunc;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.function.ToIntFunction;
public class FunctionExample1 {
private static List<Student>list=Arrays.asList(
new Student("홍길동",90,96),
new Student("윤주영",95,93)
);
public static void printString( Function<Student,String>function) {
for(Student student : list) {
System.out.println(function.apply(student)+" ");
}
System.out.println();
}
public static void printInt(ToIntFunction<Student>function) {
for(Student student : list) {
System.out.println(function.applyAsInt(student)+" ");
}
System.out.println();
}
public static void main(String[] args) {
System.out.println("[학생이름]");
printString(t->t.getName());
System.out.println("[영어 점수]");
printInt(t->t.getEnglishScore());
System.out.println("[수학 점수]");
printInt(t->t.getMathScore());
}
}
*Operator
package lamdaOper;
import java.util.function.IntBinaryOperator;
public class OperatorExample {
private static int[] scores= {92,95,87};
public static int maxOP(IntBinaryOperator operator) {//매개변수와 리턴값이 있다. 허나 해당 메소드들은 매개값을 리턴값으로 매핑보다는 매개값을 이요해 연산을 수행한후 동일타입으로
// 리턴한다.
int result=scores[0];
for(int score: scores) {
result=operator.applyAsInt(result, score);
}
return result;
}
public static void main(String[] args) {
int max=maxOP(
(a,b)->{
if(a>=b) return a;
else return b;
});
System.out.println("최대값: " + max);
int min=maxOP((a,b)->{if(a<=b) return a; else return b;});
System.out.println("최소값: " + min);
}
}
*Predicate
package lamdaPredic;
public class Student {
private String name;
private String sex;
private int score;
public Student(String name, String sex, int score) {
this.name = name;
this.sex = sex;
this.score = score;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
public int getScore() {
return score;
}
}
package lamdaPredic;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class PredicateExample {
private static List<Student> list=Arrays.asList(
new Student("홍길동", "남자", 90),
new Student("벤", "여자", 95),
new Student("김범수", "남자", 100),
new Student("에일리", "여자", 85)
);
public static double avg(Predicate<Student> pre) { // 매개값, 리턴은 boolean값
int count=0;
int sum=0;
for(Student student: list) {
if(pre.test(student)) {
count++;
sum+=student.getScore();
}
}
return (double)sum/count;
}
public static void main(String[] args) {
double maleAvg=avg(t->t.getSex().equals("남자"));
System.out.println("남자 평균 점수: "+maleAvg);
double femaleAvg=avg(t->t.getSex().equals("여자"));
System.out.println("여자 평균 점수: "+femaleAvg);
}
}
728x90
반응형
LIST
'Language > 자바' 카테고리의 다른 글
[자바]8. hashCode() 와 equals()의 차이 (0) | 2021.04.22 |
---|---|
[자바] 7. 컬렉션 프레임워크 (0) | 2021.04.06 |
[자바]5. 람다(Lamda) (0) | 2021.04.02 |
[자바]4.제네릭(Generic) (0) | 2021.03.29 |
[자바]3. 날짜 출력 Date (0) | 2021.03.23 |