본문 바로가기

내배캠/TIL

24. 08. 06

Java

 

ArrayList를 Array로 바꾸기

 

- toArray()

List<Integer> list = new ArrayList<>();
// ...
Object[] arr = list.toArray();

 

  • Object 타입의 배열을 반환하므로 활용이 번거롭다.

 

- toArray(T[] a)

List<Integer> list = new ArrayList<>();
// ...
Integer[] arr = list.toArray(new Integer[0]);

 

  • T 타입 배열을 반환한다.
  • 원시 타입 (int, double, float)이 아니기 때문에 값 타입 배열은 얻을 수 없다.
  • 파라미터 a의 길이는 0으로 지정하면 알아서 list의 길이에 맞게 조정되어 저장된다.

 

- Stream

List<Integer> list = new ArrayList<>();
// ...
int[] arr = list.stream()
	.mapToInt(Integer::intValue)
    	.toArray();

 

  • list.stream() : Stream<Integer> 반환.
  • mapToInt(Integer::intValue) : Integer의 intValue() 메서드를 참조해 값 타입인 int로 언박싱.
  • toArray() : IntStream의 원소를 배열로 반환.

 

Array를 ArrayList로 바꾸기

 

- Arrays.asList(T[] a)

String[] arr = {"a", "b", "c", "d"};
List<String> list = Arrays.asList(arr);

 

  • T가 원시 타입이 아닌 경우 사용 가능

 

- Stream

int[] arr = {1, 2, 3};
List<Integer> list = Arrays.stream()
			.boxed()
            		.collect(Collectors.toList());

 

  • boxed() : int를 Integer로 박싱
  • collect()를 호출해 List로 변환

 


 

SQL

https://school.programmers.co.kr/learn/courses/30/lessons/131123#qna

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

[문제]

REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.

 

 

[시도(오답)]

SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY 1 DESC

 

 

[정답]

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE FAVORITES IN
    (SELECT MAX(FAVORITES)
    FROM REST_INFO
    GROUP BY FOOD_TYPE)
GROUP BY FOOD_TYPE
ORDER BY 1 DESC

 

 

GROUP BY로 묶인 컬럼이 SELECT절로 뽑힐 때 가장 상단에 있는 데이터들이 임의로 가져와지게 된다. 

 

여기서는 GROUP BY FOOD_TYPE 으로 묶였으니 한식의 맨 첫 번째, 일식의 맨 첫 번째...를 가져오므로, 이는 문제에서 요구하는 FAVORITES가 가장 많은 값들이 아니게 된다.

 

MAX(FAVORITES)를 SELECT하게 되면 각 음식 종류 별 가장 많은 즐겨찾기 수를 반환하게 되는데, 이건 가장 많은 즐겨찾기를 갖고 있는 데이터 ROW 전체를 가져오는게 아닌 해당 값만 가져오므로 올바른 정답이 아니다.

 

따라서 음식점 종류 별 가장 큰 FAVORITES 값들을 뽑되, 해당 MAX FAVORITES 값과 일치하는 FAVORITES 레코드들을 WHERE 절로 검색하여 가져온 후 보여주면 정답이 된다. 

 

오답 실행 결과. ID 00002의 FAVORITES 값이 틀리게 출력된다.

 

 

 

 

 

 

 

 

[참고 자료]

https://velog.io/@jwkim/java-arraylist-array-type-conversion

 

[Java] ArrayList ↔ Array 변환

[Java] ArrayList와 Array 변환

velog.io

https://school.programmers.co.kr/questions/38854

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

'내배캠 > TIL' 카테고리의 다른 글

DTO, DAO, VO  (0) 2024.08.08
Git .gitignore 적용하기  (0) 2024.08.07
Stateless  (0) 2024.08.06
Java 날짜 함수  (4) 2024.08.05
24. 08. 03  (0) 2024.08.04