💡풀이
import java.util.*;
class Solution {
// 데이터의 각 행을 객체로 다루기 위한 내부 클래스
class Product {
Map<String, Integer> map;
Product(int code, int date, int maximum, int remain) {
map = new HashMap<>();
map.put("code", code);
map.put("date", date);
map.put("maximum", maximum);
map.put("remain", remain);
}
// 이름(ext, sort_by)에 해당하는 값을 가져오는 메소드
int getData(String name) {
return map.get(name);
}
// 객체를 다시 int[] 배열로 변환하는 메소드
int[] getArray() {
return new int[]{map.get("code"), map.get("date"), map.get("maximum"), map.get("remain")};
}
}
public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) {
// 2차원 배열 데이터를 Product 객체 리스트로 변환
List<Product> products = new ArrayList<>();
for(int[] d : data) {
products.add(new Product(d[0], d[1], d[2], d[3]));
}
// Stream을 이용해 데이터를 필터링하고 정렬
return products.stream()
.filter(p -> p.getData(ext) < val_ext) // 1. 조건(ext)에 맞는 데이터만 필터링
.sorted(Comparator.comparing(p -> p.getData(sort_by))) // 2. 기준(sort_by)에 따라 정렬
.map(Product::getArray) // 3. Product 객체를 int[] 배열로 변환
.toArray(int[][]::new); // 4. 결과를 2차원 배열로 최종 반환
}
}
📖새로 배운 부분
toArray(int[][]::new)
- 왜 써야 하는가?
- 그냥
.toArray()
만 쓰면 결과가Object[]
타입으로 나옵니다 - 이
Object[]
는int[][]
같은 특정 배열로 바꿀 수 없어서 에러가 발생합니다
- 그냥
- 무엇을 하는가?
.toArray(int[][]::new)
는 Stream에게 "결과를int[][]
타입 배열로 만들어줘" 라고 정확히 알려주는 역할을 합니다
Stream의 최종 결과를 Object[]가 아닌 원하는 특정 타입의 배열(int[][], String[] 등)로 만들고 싶을 때 사용하면 됩니다.
mapToInt, mapToLong, mapToDouble처럼 기본형 타입을 다루는 스트림으로 바꿨다면, .toArray()만 사용해도 원하는 기본형 배열(int[], long[] 등)을 바로 얻을 수 있습니다.
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스, Java] 성격 유형 검사하기 (0) | 2025.07.21 |
---|---|
[프로그래머스, Java][카카오 인턴] 키패드 누르기 (0) | 2025.07.21 |
[프로그래머스, Java] 크레인 인형뽑기 게임 (0) | 2025.07.21 |
[프로그래머스, Java] 햄버거 만들기 (0) | 2025.07.21 |
[프로그래머스, Java] 숫자 짝꿍 (0) | 2025.07.21 |