일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 롤
- 배틀그라운드
- AWS
- 업데이트
- LEAGUE OF LEGENDS
- 리그오브레전드
- 아이폰X
- 인텔
- 닌텐도 스위치
- Review
- 엔비디아
- 문태환기자
- 이원경기자
- 리뷰
- 오버워치
- Microsoft
- 플레이웨어즈
- 구글
- 공개
- 이벤트
- 출시
- 브레인박스
- Apple
- Bitcoin
- 삼성
- 비트코인
- 카카오게임즈
- 애플
- 마이크로소프트
- Today
- Total
IT & Life
[해외] 자바(Java) 8 Lambda에 대한 간략한 소개 본문
Java 8 Lambda에 대한 간략한 소개
자바 프로그래머이고 자바 8 람다에 대해 더 알고 싶다면이 기사에서 람다 구문과 사용법을 자세히 살펴볼 것이다.
Java 의 람다 식은 표현식 에서 클래스의 메서드를 표현하는 간결한 방법입니다. 매개 변수 목록과 본문이 있습니다. 본문은 단일 표현식이나 블록이 될 수 있습니다 . 이것은 일반적으로 인터페이스의 구현이 필요한 곳에서 사용됩니다. 이러한 필요성은 대개 인터페이스를 메소드 호출을위한 인수로 요구할 때 발생합니다.
일부 간단한 람다 식
람다 식의 간단한 예제를 살펴 보겠습니다.
다음은 두 개의 숫자 x 와 y 를 받아들이고 합을 계산 하는 람다 식입니다 .
(int x,int y) -> x + y;
보다 간결한 표현을 위해 매개 변수 유형을 삭제하십시오.
(x, y) -> x + y;
매개 변수를 허용하지 않는 함수를 정의하십시오.
() -> 404;
다음도 유효하며 매개 변수를 허용하지 않고 아무 것도 반환하지 않습니다.
() -> {}
단일 매개 변수에 대한 매개 변수를 묶는 괄호가 필요하지 않습니다.
x -> x + 1
더 복잡한 코드 블록도 가능합니다. 다음 람다는 한 줄의 매개 변수를 받아들이고 그것에 대한 처리를합니다. 매개 변수의 유형은 주변 컨텍스트에서 유추됩니다.
line -> {
String[] x = pattern.split(line);
return new Player(Integer.parseInt(x[0]),
x[1],
x[2],
x[3],
Integer.parseInt(x[4]));
}
깨끗하고 간결한 코딩
람다 식을 사용하면 코드를 깨끗하고 간결하게 만들 수 있습니다. 이를 지원하기 위해 Java 8 클래스는 람다를 광범위하게 사용합니다.
리스트 또는 세트에 대한 루핑
List , Set , Queue 와 같은 콜렉션 클래스 는 Iterable 인터페이스를 구현 하므로 요소를 훨씬 쉽게 루핑 할 수 있습니다.
이름 목록을 선언하십시오.
List<String> names = Arrays.asList("Joe", "Jack", "James", "Albert");
람다없이 목록을 반복 :
for (String name : names) {
System.out.println(name);
}
람다를 사용하면 위의 루프를 다음과 같이 작성할 수 있습니다.
names.forEach(name -> System.out.println(name));
Java 8 메소드 참조를 사용하면 위의 내용을 다음과 같이보다 간결하게 작성할 수 있습니다.
names.forEach(System.out::println);
지도 루핑하기
지도 의 키와 값의 매핑입니다. 맵을 루핑 할 때 (키, 값) 맵핑을 반복합니다. 이 상황에 람다를 어떻게 사용하는지 비교하십시오.
먼저지도를 정의하십시오.
Map<String,Integer> map = new HashMap<>();
map.put("Atlanta, Georgia", 110);
map.put("Austin, Texas", 115);
map.put("Baltimore, Maryland", 105);
map.put("Birmingham, Alabama", 99);
map.put("Boston, Massachusetts", 98);
이 맵을 기존 방식으로 반복 할 수 있습니다.
for (Map.Entry<String,Integer> e : map.entrySet()) {
System.out.println(e.getKey() + " => " + e.getValue());
}
다음은 람다를 사용하여 똑같은 일을 빠르고 간결하게 수행하는 방법입니다.
map.forEach((k, v) -> System.out.println(k + " => " + v));
기능 인터페이스
람다 식의 반환 형식은 무엇입니까? 즉, 다음 문장에서 X 의 유형은 무엇 입니까?
X x = a -> a + 1;
람다 표현식의 반환 유형은 단일 추상 메소드가있는 인터페이스 인 기능적 인터페이스 입니다. 호환 가능한 추상 메서드를 사용하여 인터페이스에 람다 식을 할당 할 수 있습니다. 아래에 몇 가지 예가 나와 있습니다.
다중 스레드 작업 만들기
별도의 스레드에서 실행을 위한 작업을 생성하는 것을 고려하십시오. 작업을 Runnable 인터페이스 로 정의 하고 run () 메소드를 구현해야 합니다 . 여기서 Runnable 은 기능적인 인터페이스입니다.
class MyTask implements Runnable {
...
public void run() {
// implement your task here
System.out.println("Running in a separate thread now.");
}
...
}
그런 다음 MyTask 클래스 의 인스턴스를 생성하고 이를 사용하여 새로운 실행 스레드를 시작할 수 있습니다.
MyTask task = new MyTask();
Thread thread = new Thread(task);
thread.start();
람다를 사용하면 Runnable 을 만드는 과정 이 훨씬 쉬워집니다. 위의 작업 정의는 다음과 같이 다시 작성할 수 있습니다.
Runnable task = () -> System.out.println("Running in a separate thread now.");
또는:
Thread thread = new Thread(() -> System.out.println("Running in a separate thread now."));
thread.start();
Comparator를 사용하여 비교
비교기는 특정 유형의 개체를 비교하기위한 기능 인터페이스입니다. compare () 라는 하나의 추상적 인 메서드를 정의하며 , 람다 식을 사용하여 정의 할 수 있습니다.
다음은 대문자와 소문자를 구별하지 않고 비교 하는 데 사용되는 Comparator를 만드는 람다식 입니다.
Comparator<String> cmp = (x, y) -> x.compareToIgnoreCase(y);
Comparator 기능 인터페이스 의 인스턴스 가 생성되면 필요에 따라 다시 사용할 수 있습니다.
여기서는 문자열 목록을 오름차순으로 정렬합니다.
List<String> names = Arrays.asList("Joe", "Jack", "James", "Albert");
Collections.sort(names, cmp);
names.forEach(System.out::println);
// prints
Albert
Jack
James
Joe
위의 목록은 제 위치에서 정렬됩니다. 다음과 같이 binarySearch () 메소드를 사용하여 검색 할 수 있습니다 .
System.out.println("search(Joe):" + Collections.binarySearch(names, "Joe", cmp));
# prints
search(Joe):3
목록에서 최대 값과 최소값을 계산하는 것은 lambdas를 사용하는 것 또한 쉽습니다.
데이터 정의 :
List<Integer> temps = Arrays.asList(110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
비교기를 정의하려면 람다 식을 사용하십시오.
Comparator<Integer> cmpTemp = (x, y) -> Integer.compare(x, y);
최대 및 최소 인쇄 :
System.out.println("------ Max/Min ------");
System.out.println(Collections.max(temps, cmpTemp) + "/" + Collections.min(temps, cmpTemp));
GUI 프로그래밍에서 사용
람다 식은 이벤트 처리기를 구현하는 GUI 프로그래밍에서도 매우 유용합니다. 다음은 버튼 클릭 핸들러 사용의 예입니다.
JButton button = new JButton("Click Me");
button.addActionListener(e -> System.out.println("Button clicked!"));
그리고 Java 8에서 lambdas를 사용하는 방법을 간략하게 살펴 보았습니다.