[국비지원] 26일차 - 문자열 내 마음대로 정렬하기
오늘 배운 람다식을 사용해서 , 람다식을 매개변수로 받을 수 있는 Arrays.sort() 함수의 정렬값을 임의로 바꾸는 방법을 배웠다.
처음 배우는 내용들이 많아서 헷갈리지만 내가 이해한 내용을 적자면,
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings,(a,b) -> {
if(a.charAt(n) == b.charAt(n)){
return a.compareTo(b);
} else {
return a.charAt(n) - b.charAt(n);
}
});
return strings;
}
}
Arrays.sort()는 두번째 매개변수가 null이라면 natural ordering에 의해 오름차순 또는 알파벳 순서로 정렬되지만 두번째 매개변수를 주어 사용자 정의 순서를 만들 수도 있다.
두번째 매개변수는 인터페이스 Comparator 타입으로 익명 구현 객체를 대입하여 Comparator의 compare메소드를 오버라이드할 수 있다. Comparator 인터페이스의 compare 메소드는 첫번째 매개변수로 받은 배열의 값인 두 매개변수를 각각 비교하는데 compare(int a, int b)라 했을 때 리턴값이 양수라면 기준값 a를 오른쪽에, 비교값 b를 왼쪽에 정렬하고 리턴값이 음수라면 반대로 기준값 a를 왼쪽에 정렬한다. 리턴값이 0이라면 순서가 바뀌지 않는다.
n 번째의 인덱스를 기준으로 알파벳 순서로 정렬해야 하므로 .charAt을 사용해 a와 b의 n번째 인덱스의 아스키코드를 비교하여 정렬하는 람다식을 대입했다. 단, n번째의 아스키코드가 같을 경우에는 compareTo를 사용해 알파벳 순으로 정렬되게 하였다.
TIL
람다식 ... 처음엔 너무 간결하게 생겨서 당황했지만 오늘 여러번 사용하다보니 조금 친해졌을지도?
2024.03.13 - [개발공부/JAVA] - [JAVA] 람다식(Lambda Expressions)
[JAVA] 람다식(Lambda Expressions)
자바는 객체 지향 프로그래밍을 기반으로 하고 있지만 함수형 프로그래밍을 위한 구현체들을 만들어두었다. StreamAPI나 람다식 등이 이에 해당된다. 람다식이란? 함수형 인터페이스(Functional Interf
abc-datatype.tistory.com