2023년 10월 30일 mapToInt()

2023. 10. 30. 23:37· TIL
목차
  1. .mapToInt()
  2. Object[]
  3. stream() ??
  4. mapTo*()
728x90
반응형

.mapToInt()

다른 사람들의 TIL을 보며 내 글이 두서가 없다는 것을 느꼈다.
해서 이후부터는 TIL도 목적성을 가지고 작성해야겠다 라는 목표를 세운다.
그 조건을 가지는 첫 글을 작성한다.

팀 과제를 진행하며 Java의 내장 함수의 활용하는데 있어 어려움을 느꼈다.
해서 숙련을 위한 방법이 무엇이 있을까 하다 마침 알고리즘 스터디를 겸하고 있어
선행을 조금 진행하게 되었다.

    //나누어 떨어지는 숫자 배열

    public int[] solution14(int[] arr, int divisor) {

        int[] answer;
        List<Integer> integerList = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            if(arr[i] % divisor == 0)
                integerList.add(arr[i]);
        }

        integerList.sort(Comparator.naturalOrder());

        answer = integerList.stream().mapToInt(i -> i).toArray();

        return (integerList.isEmpty()) ? new int[]{-1} : answer;
    }

다른 사람들처럼 화려한 코드는 작성하지 못하니 지금은 내 방식대로 걸어나가기로 했다.

다만 이 전 문제에서 sort를 선택 정렬로 직접 구현하며 n^2 복잡도를 작성하고 나니 약간 현타가 온 상태였다.

쓰레기통
        for (int i = 0; i < lengthNum; i++) {
            for (int j = 0; j < lengthNum -1; j++) {
                if (answerArray[i] > answerArray[j]) {
                    sortTmp = answerArray[i];
                    answerArray[i] = answerArray[j];
                    answerArray[j] = sortTmp;
                }
            }
        }

때문에 정렬은 하루 날 잡아 따로 공부하는게 낫겠다 라는 생각에 지금은 List에 sort()가 있다면 그것을 사용하기로 했는데, 문제는 여기서부터 시작되었다.

원하는 값만 받아 배열에 집어넣고 만약 배열이 비어있다면 {-1} 만 들어있는 배열을 반환

이것이 조건이었기 때문에 동적할당을 목적으로 integerList를 생성해둔 상태에서
List를 int[]로 바꾸는 방법은 ...

없었다. 없다기보단 내가 모르는 type인 Object[]라는게 등장해버렸다.
열심히 강의를 듣지 않고 딴짓을 한 결과가 여기서 드러나버리나...

Object[]

Object 는 이름처럼 객체를 반환하는 클래스다. 그리고 Object[]면 그 객체들이 담긴 배열을 리턴한다는 의미겠지.

이전에 TIL을 작성하면서 Java에서는 배열도 객체다. 라고 공부했는데, 그 이유는 배열의 super class가 Object이기 때문이며 그로부터 메서드를 상속 받기 때문이라고 한다.

즉 아래에 소속되어 있는 자식클래스에 부모클래스를 넣으려고 하니 받아들이지 못하는것(이라고 이해했다.)

stream() ??

구글링을 하니 모든 사람들이 List를 Array로 변환하기 위해 이 방식을 공식처럼 사용하더라.

    integerList.stream().mapToInt(i -> i).toArray();

단순히 외우는것도 좋지만 암기도 외울 포인트가 있어야 효율적이라는 조참거 것을 알기 때문에 시간을 투자해 조금 뜯어보기로 했다.

구글링을 해보니 다들 하나같이

    stream 은 Java8부터 ~~~ 어쩌구 저쩌구

로 시작하던데 솔직히 별로 관심 없는 내용으로 서두를 여는 것은 내 취향도 아닐뿐더러 Java 7 이하를 내가 다룰 일이 있을것 같지도 않았다.
다만 그중에서 그래도 stream은 데이터의 흐름 (data flow) 라고 설명하는 부분은 내 이해를 위해 조금 신경써 읽었다.

처음에는 단순히

    int[] = object[];

같은 호환성 문제를 해결하기 위한 도구들의 집합이라고 생각했는데 반대로 오히려

    stream().mapToInt(i -> i).toArray();

이 부분이 stream의 아주 작은 활용에 지나지 않는다는 것만 알게되었다.

단순히 TIL로 작성할만한 내용이 아니라고 판단했고 때문에 이번 TIL의 주제로 .mapToInt(i -> i)에 주목하게 되었다.
때문에 여기서부터가 본론이라고 할 수 있을듯

mapTo*()

stream 의 메서드중 하나인 mapToInt()는 매개변수로 함수를 받는다.
그리고 내부에 람다식으로 i -> i 가 들어가게 되는데


    int[] answer;
    List<Integer> integerList = new ArrayList<T>();

    answer = integerList.stream().mapToInt(i -> i).toArray();

향상 for문 마냥 List<Integer> integerList를 순회하면서 내부에 있는 Integer 타입의 i 를 int타입의 i로 반환하게 된다.
이 과정에 Stream<Integer> integerList로 변환되게 되는데 그렇게 되면 그제서야
stream의 내장 함수인 toArray()를 사용할 수 있게 되는 것이다.

toArray 메서드를 사용할 수 없는게 아니라 초기화 되지 않아서 밑줄이 뜬다.

Stream<T> 타입의 tmp는 stream의 메서드인 toArray()를 사용할 수 있다.

따라서, 결론적으로List를 Array로 전환할때는

    array[] = List.stream().mapToInt(t -> t).toArray();

형태를 하나의 공식처럼 사용해야 한다는 것이다.

728x90
반응형
저작자표시 (새창열림)

'TIL' 카테고리의 다른 글

2023년 11월 1일  (0) 2023.10.31
2023년 10월 31일 상속과 포함  (0) 2023.10.31
2023년 10월 29일  (0) 2023.10.30
2023년 10월 28일  (0) 2023.10.30
2023년 10월 27일  (0) 2023.10.28
  1. .mapToInt()
  2. Object[]
  3. stream() ??
  4. mapTo*()
'TIL' 카테고리의 다른 글
  • 2023년 11월 1일
  • 2023년 10월 31일 상속과 포함
  • 2023년 10월 29일
  • 2023년 10월 28일
정유감
정유감
반응형
정유감
정말유감이야
정유감
전체
오늘
어제
  • 분류 전체보기 (57)
    • TIL (48)
    • KPT (4)
    • TMI (3)
    • BLOG (0)
    • DIARY (0)
    • 포스팅용 메모 (0)
    • AS (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • mapToInt
  • 자연수 뒤집어 배열로 만들기
  • 순열
  • 브루트포스
  • Summit
  • 하이퍼링크?
  • 비트마스크
  • 홀수 짝수
  • markdown
  • isBefore
  • 완전탐색
  • toBinary
  • kpt
  • 백트래킹
  • 약수의 합
  • Til
  • Comparator
  • contains
  • euclidean
  • 에이닷

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
정유감
2023년 10월 30일 mapToInt()
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.