Backend
home
📝

Lambda

Lambda Example 1
인터페이스
package com.lambda; @FunctionalInterface public interface MyInterface { void action(int x); }
Java
복사
code 1
package com.lambda; public class LambdaExample { public static void main(String[] args) { MyInterface mi = new MyInterface() { @Override public void action(int x) { System.out.println("숫자 " + x + "을 활용한 동작"); } }; mi.action(3); // 같은 동작 MyInterface li = (x) -> System.out.println("숫자 " + x + "을 활용한 동작"); li.action(3); // 같은 동작 } }
Java
복사
code 2
package com.lambda; public class LambdaExample2 { public static void main(String[] args) { action((x) -> System.out.println("숫자 " + x + "을 활용한 동작")); } public static void action(MyInterface mi) { int x = 3; mi.action(3); } }
Java
복사
Lambda Example 2
인터페이스
package com.lambda2; @FunctionalInterface public interface Calculable { int calculate(int x, int y); }
Java
복사
Calculator.java
package com.lambda2; import java.util.Scanner; public class Calculator { public void calculate(Calculable calc) { Scanner sc = new Scanner(System.in); System.out.print("숫자를 입력하세요 -> "); int x = sc.nextInt(); System.out.print("\n숫자를 입력하세요 -> "); int y = sc.nextInt(); int result = calc.calculate(x, y); System.out.println(result); } }
Java
복사
CalculatorExample.java - 더하기, 빼기, 곱하기 연산을 람다식으로 표현
package com.lambda2; public class CalculatorExample { public static void main(String[] args) { Calculator c = new Calculator(); c.calculate((x, y) -> x + y); c.calculate((x, y) -> x - y); c.calculate((x, y) -> x * y); } }
Java
복사
Lambda Example 3
Speakable.java
package com.lambda3; public interface Speakable { void speak(String content); }
Java
복사
Workable.java
package com.lambda3; public interface Workable { void work(String name, String job); }
Java
복사
Person.java
package com.lambda3; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public class Person { private String name, job, nation; public void action1(Workable workable) { workable.work(name, job); } public void action2(Speakable speakable) { speakable.speak(nation); } }
Java
복사
PersonExample
package com.lambda3; public class PersonExample { public static void main(String[] args) { Person minsung = new Person("김민성", "프로그래머", "대한민국"); // 같은 Person임에도 다른 액션을 취하도록 만들 수 있다. minsung.action1(((name, job) -> { System.out.println("안녕하세요, 제 이름은 " + name + "입니다."); System.out.println("제 직업은 " + job + "입니다."); })); minsung.action2(content -> { if (minsung.getNation().equals("대한민국")) { System.out.println("안녕하세요!"); } else { System.out.println("Hello World!"); } }); minsung.action2(System.out::println); // 대한민국 출력 } }
Java
복사
Lambda Example 4
AgeComparator
package com.lambda4; import java.util.Comparator; public class AgeComparator implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { return o1.getAge() - o2.getAge(); } }
Java
복사
Person.java
package com.lambda4; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString; @AllArgsConstructor @Getter @ToString public class Person { private String name; private int age; // @Override // public int compareTo(Person o) { //// return Integer.valueOf(age).compareTo(o.getAge()); // 첫번째 방법 // if (age < o.getAge()) { // return -1; // } else if (age == o.getAge()) { // return 0; // } else { // return 1; // } // } }
Java
복사
PersonExample
package com.lambda4; import java.util.Comparator; import java.util.TreeSet; public class PersonExample { public static void main(String[] args) { // '권지훈', '김태환', '성제현' // TreeSet<Person> treeSet = new TreeSet<Person>(new Comparator<Person>() { // @Override // public int compare(Person o1, Person o2) { // return o1.getAge() - o2.getAge(); // } // }); // TreeSet<Person> treeSet = new TreeSet<Person>((o1, o2) -> o2.getAge() - o1.getAge()); // 메소드 참조 활용 - 위의 동작과 같음 TreeSet<Person> treeSet = new TreeSet<Person>( Comparator.comparingInt(Person::getAge) ); // TreeSet<Person> treeSet = new TreeSet<Person>( // Comparator.comparingInt(Person::getAge) // .thenComparing((o1, o2) -> o1.getName().compareTo(o2.getName())) // ); treeSet.add(new Person("권지훈", 7)); treeSet.add(new Person("김태환", 8)); treeSet.add(new Person("성제현", 6)); System.out.println(treeSet); } }
Java
복사
Lambda Example 5
Calculable.java
package com.lambda5; @FunctionalInterface public interface Calculable { double calc(double x, double y); }
Java
복사
Person.java
package com.lambda5; public class Person { public void action(Calculable c) { double result = c.calc(10, 4); System.out.println("결과 : " + result); } }
Java
복사
CalculateService.java
package com.lambda5; // 서비스 로직만 따로 구현 public class CalculateService { public static double sum(double x, double y) { return x + y; } public static double multiply(double x, double y) { return x * y; } }
Java
복사
MethodReferenceExample
package com.lambda5; public class MethodReferenceExample { public static void main(String[] args) { Person p = new Person(); // p.action(인터페이스); -> 인터페이스의 메소드 calc(10, 4) 호출 -> 그 결과 출력 // 추상 메소드 [double calc(double x, double y)] p.action((x, y) -> CalculateService.sum(x, y)); p.action(CalculateService::sum); // 위 코드와 동작 같음 p.action((x, y) -> CalculateService.multiply(x, y)); p.action(CalculateService::multiply); // 위 코드와 동작 같음 } }
Java
복사