람다식(lambda expression) = 익명 함수(anonymous function)
what?
이름 없는 함수
why?
- 코드에서 한 번만 실행하는 경우
- 함수 자체를 다른 함수의 인수로 전달하는 경우
- 함수를 더 간결하게 표현할 수 있고 가독성이 좋아짐
how?
private static class Node{
int dest, cost;
public Node(int dest, int cost){
this.dest = dest;
this.cost = cost;
}
}
public static void main(String[] args){
Node[] nodes = new Node[5];
nodes[0] = new Node(1,10);
nodes[1] = new Node(2, 20);
nodes[2] = new Node(3, 15);
nodes[3] = new Node(4, 5);
nodes[4] = new Node(1, 25);
//익명 함수 사용
Arrays.sort(nodes, (o1, o2) -> Integer.compare(o1.cost, o2.cost));
//익명 함수 사용 x
Arrays.sort(nodes, new Comparator<Node>(){
@Override
public int compare(Node o1, Node o2){
return Integer.compare(o1.cost, o2.cost);
}
});
}
1)람다식 사용
Arrays.sort(nodes, (o1, o2) -> Integer.compare(o1.cost, o2.cost));
Arrays.sort()를 사용해서 배열 정렬
두 번째 매개변수로 'Comparator' 인터페이스의 'compare()' 메서드를 구현하는 람다식 전달
(o1, o2) -> Integer.compare(o1.cost, o2.cost)
Node 객체를 cost를 기준으로 비교함
(o1, o2): 매개변수 목록(nodes)
->: 람다 화살표. 매개변수 목록과 람다식 본문 분리
Integer.compare(o1.cost, o2.cost): 람다식 본문. 비교 연산을 수행해서 매개변수1이 매개변수2보다 작으면 -1, 같으면 0, 크면 1 반환
2)람다식 사용 x
Arrays.sort(nodes, new Comparator<Node>(){
@Override
public int compare(Node o1, Node o2){
return Integer.compare(o1.cost, o2.cost);
}
});
sort()의 매개변수
- 정렬할 배열 nodes
- Comparator 객체: 배열의 요소들을 비교하는 방법 정의. 익명 클래슷 ㅏ용
new Comparator<Node>(){...}: 익명 내부 클래스 정의. Comparator 인터페이스 구현 -> compare() 메서드 재정의
재정의된 메서드: Node 객체 두 개를 받아서 각 객체의 'cost'를 비교한 값 리턴
compare에서 리턴된 값에 따라 sort() 메서드가 배열 요소 정렬
'코딩테스트' 카테고리의 다른 글
코딩테스트 배열 관련 함수 (0) | 2024.04.22 |
---|---|
자바 코딩테스트 메서드 기초: 구현 노하우 (0) | 2024.04.18 |
자바 코딩테스트 기본 문법 (0) | 2024.04.16 |
알고리즘 효율 분석: 시간 복잡도 (0) | 2024.04.15 |
코딩 테스트 공부의 기초 (0) | 2024.04.15 |