java.util.function
패키지에 제공함수형 인터페이스 | 메서드 | 인자(들) 타입 | 반환값 타입 |
---|---|---|---|
Runnable (java.lang 패키지) |
run |
||
Supplier<T> |
get |
T |
|
Consumer<T> |
accept |
T |
|
BiConsumer<T, U> |
accept |
T , U |
|
Function<T, R> |
apply |
T |
R |
BiFunction<T, U, R> |
apply |
T , U |
R |
Predicate<T> |
test |
T |
boolean |
BiPredicate<T, U> |
test |
T , U |
boolean |
UnaryOperator<T> |
apply |
T |
T |
BinaryOperator<T> |
apply |
T , T |
T |
☕ Main.java
Runnable dogButtonFunc = () -> System.out.println("멍멍");
Runnable catButtonFunc = () -> System.out.println("야옹");
Runnable cowButtonFunc = () -> System.out.println("음메");
dogButtonFunc.run();
catButtonFunc.run();
cowButtonFunc.run();
☕ Button.java
public class Button {
private String text;
public Button(String text) { this.text = text; }
public String getText() { return text; }
private Runnable onClickListener;
public void setOnClickListener(Runnable onClickListener) {
this.onClickListener = onClickListener;
}
public void onClick () {
onClickListener.run();
}
}
☕ Main.java
System.out.println("\\n- - - - -\\n");
Button dogButton = new Button("강아지");
dogButton.setOnClickListener(dogButtonFunc);
Button catButton = new Button("고양이");
catButton.setOnClickListener(() -> {
System.out.println("- - - - -");
System.out.println(catButton.getText() + " 울음소리: 야옹야옹");
System.out.println("- - - - -");
});
dogButton.onClick();
catButton.onClick();
Supplier<String> appName = () -> "얄코오피스";
Supplier<Double> rand0to10 = () -> Math.random() * 10;
Supplier<Boolean> randTF = () -> Math.random() > 0.5;
String supp1 = appName.get();
Double supp2 = rand0to10.get();
Boolean supp3 = randTF.get();
System.out.println("\\n- - - - -\\n");
Consumer<Integer> sayOddEven = i -> System.out.printf(
"%d은 %c수입니다.%n", i, "짝홀".charAt(i % 2)
);
Consumer<Button> clickButton = b -> b.onClick();
BiConsumer<Button, Integer> clickButtonNTimes = (b, n) -> {
for (int i = 0; i < n; i++) { b.onClick(); }
};
sayOddEven.accept(3);
sayOddEven.accept(4);
clickButton.accept(catButton);
clickButtonNTimes.accept(dogButton, 5);
System.out.println("\\n- - - - -\\n");
Function<Integer, Boolean> isOdd = i -> i % 2 == 1;
Function<String, Button> getButton = s -> new Button(s);
BiFunction<Unit, Horse, Integer> getfullHP = (u, h) -> {
h.setRider(u);
return u.hp;
};
BiFunction<String, Runnable, Button> getButtonWFunc = (s, r) -> {
Button b = new Button(s);
b.setOnClickListener(r);
return b;
};
Boolean isOdd3 = isOdd.apply(3);
Boolean isOdd4 = isOdd.apply(4);
Button goatButton = getButton.apply("염소");
Integer unitFullHP = getfullHP.apply(
new MagicKnight(Side.RED), new Horse(80)
);
getButtonWFunc
.apply("오리", () -> System.out.println("꽥꽥"))
.onClick();
Predicate<Integer> isOddTester = i -> i % 2 == 1;
Predicate<String> isAllLowerCase = s -> s.equals(s.toLowerCase());
BiPredicate<Character, Integer> areSameCharNum = (c, i) -> (int) c == i;
BiPredicate<Unit, Unit> areSameSide = (u1, u2) -> u1.getSide() == u2.getSide();
boolean isOddT3 = isOddTester.test(3);
boolean isOddT4 = isOddTester.test(4);
boolean isAL1 = isAllLowerCase.test("Hello");
boolean isAL2 = isAllLowerCase.test("world");
boolean areSameCN1 = areSameCharNum.test('A', 64);
boolean areSameCN2 = areSameCharNum.test('A', 65);
boolean areSameSide1 = areSameSide.test(
new Knight(Side.RED), new Knight(Side.BLUE)
);
boolean areSameSide2 = areSameSide.test(
new Swordman(Side.BLUE), new MagicKnight(Side.BLUE)
);
UnaryOperator<Integer> square = i -> i * i;
UnaryOperator<Swordman> respawn = s -> {
if (s instanceof MagicKnight) return new MagicKnight(s.getSide());
if (s instanceof Knight) return new Knight(s.getSide());
return new Swordman(s.getSide());
};
Integer squared = square.apply(3);
Swordman respawned1 = respawn.apply(new Knight(Side.BLUE));
Swordman respawned2 = respawn.apply(new MagicKnight(Side.RED));