람다식에 대한 정의는 다른 기술 블로그를 찾아보는 것을 권장한다.
람다식이 아닌 경우
class Solution {
public int[] solution(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 50 && arr[i] % 2 == 0) {
arr[i] = (int) arr[i] / 2;
} else if (arr[i] < 50 && arr[i] % 2 != 0) {
arr[i] = arr[i] * 2;
} else {
continue;
}
}
return arr;
}
}
내부가 풀어써져 있어서 그런데 안의 코드를 약간 함수화하겠다.
class Solution {
public int[] solution(int[] arr) {
int[] answer = testMethod(arr);
return answer;
}
public int[] testMethod(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 50 && arr[i] % 2 == 0) {
arr[i] = (int) arr[i] / 2;
} else if (arr[i] < 50 && arr[i] % 2 != 0) {
arr[i] = arr[i] * 2;
} else {
continue;
}
}
return arr;
}
}
이질감이 조금 느껴지긴 하지만 다음과 같이도 작성할 수 있다. testMethod 메소드를 실행시키면 구현한 서비스 로직이 리턴되어 값이 나올 것이다. 람다식의 경우도 익명 함수이기에 이터레이터로써 역할을 수행하게 할 수 있다.
람다식으로 고칠 경우
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println(Arrays.toString(solution(new int[]{1, 2, 3, 100, 99, 98})));
}
public static int[] solution(int[] arr) {
return Arrays.stream(arr)
.map(i -> i >= 50 && i % 2 == 0 ? i / 2 :
i < 50 && i % 2 != 0 ? i * 2 :
i)
.toArray();
}
}
자바에서는 Arrays 모듈에 stream이라는 내장함수가 람다식을 도와주고 있다. 안의 코드 내용은 크게 어렵지 않다. for 반복문으로 값을 하나씩 추출해서 분기문을 태운 것처럼 i가 배열 안의 값이고 삼항 연산자 안에 삼항 연산자를 또 태우는 구조라고 보면 된다. 삼항 연산자를 모른다면 검색을 해서 이해를 하고 알고 있다면 false의 부분에서 또 다시 삼항 연산자가 태워지는 구조임을 확인할 수 있을 것이다.
람다식에 대해 자세히 알아보기
람다식 내에서도 상황에 따라 다양하게 적용할 수 있도록 여러 스트림 함수가 있는 것을 확인했다. 위에서는 map을 사용했는데 map 말고도 filter, reduce, map, collect 등 다양한 스트림 함수가 있다. 이것은 이 게시글이 아닌 다른 게시글에 정리하겠다.
https://choidevvv.tistory.com/5
람다식
일반적으로 람다식은 익명 함수라고도 불린다. 일반적으로 함수는 이름이 존재하는데 람다식에는 존재하지 않는다. 코드로써 일반 함수와 람다식을 비교하면 다음과 같다. // 일반함수식 public i
choidevvv.tistory.com
'java > 메모장' 카테고리의 다른 글
[코딩테스트] 달리기 경주 (0) | 2024.02.18 |
---|---|
형 변환 (0) | 2024.02.12 |
리스트 (0) | 2024.02.12 |
람다식의 스트림 함수 (0) | 2024.02.12 |
특정 인덱스에서 배열 슬라이싱하기 (0) | 2024.02.11 |