티스토리 뷰

카테고리 없음

Java Map의 Merge - 오늘의 일기

기억고양이 2024. 3. 29. 02:13
반응형
        int [] score = {4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2};

 

(정보가 모자란 일기성 글이에요)

이런 배열이 있었는데 아래처럼 변환해서 정리하고 싶었다.

숫자 종류가 일정한거보면 map으로 정리하는게 편해보인다.

그럼 맵에다가 value가 0인 key를 4개 넣은 다음, if문으로 체크해서 value+1을 해줘야 한다.

 

좀 더 편한게 없나 싶어서 찾아보니 map에 merge라는 API가 있었다.

얘는 get으로 체크할 필요도 없고, 알아서 key 탐색과 value 계산을 한줄로 처리할 수 있더라.

Merge를 쓰면 불필요한 if로 검사할 필요가 없다

 

여튼 value 연산을 조금 더 편하게 할 수 있었다.

다음에 쓸 일 있으면 또 쓸 수 있겠지?


여튼 이걸 써보면서 답답했던게 뭐냐면

마지막 인자에 대체 뭘 넣어야될지 모르겠음

 

아니 진짜 뭘 넣을지 도저히 모르겠더라.

 

찾아보니 람다식을 넣어주면 된다더라.

scrMap.merge(num,1, (v1,v2) -> v1+1); // 이렇게 쓰거나
scrMap.merge(num,1, Integer::sum); // 요렇게 써도 값은 같다

이렇게 써도 결과는 똑같이 나온다.

v1 == key, v2 == value 라고 알아 먹는것 같다.

 

한 동안 사용방법을 몰라서 chatgpt에게 물어봤더니

사과하고 다른소스 가져왔다고 함 -> 똑같음

 

사과는 잘함

똑같은 소리만 반복하다가 나중엔 API 끌고와서 딴소리를 하더라.

근데 지금 보니까 저 형태 자체는 맞는데 설명이 2% 모자랐던듯. 사과하니까 저게 맞는지 틀린건지 알 수가 없더라.

 

아무튼 람다식이니, 함수형 인터페이스다 뭐다 하는것들은 JDK8 에 새로 추가된 것인데

이 이후로 코드이해에 더욱 애를 먹는것 같다

 

간결하다고는 하는데 간결하기만 하지 아무리봐도 직관성은 x박은 느낌이랄까?

아이씻팔

 

예전에 배워놓은 낡아빠진 지식으론 답이 없는것 같아서, 어떻게 공부해야될지 더 모르겠다.

 

일단 대충 헤딩하고 이해하게 되면 더 자세히 남겨놔야지

 

 

반응형