Stream 그게 뭐시여 시냇물 아니여?

MongCheol·2023년 2월 13일
1

부트캠프

목록 보기
10/15
post-thumbnail

세줄 요약

  1. 나는 왜 Stream을 몰랐지?
  2. 때마침 걸린 알고리즘 문제
  3. Stream을 쓰니까 너무 편해(?)

왜 몰라?

부트캠프에서 Java를 학습하다가 Stream을 보고 이게머징? 했다.
Java 8에 만들어져서 지금 Java 19가 가장 최신 버전인 약 8년간의 세월동안
나는 Stream의 존재를 몰랐다..
내가 학부생동안 자바를 헛배웠나 싶어서 확인해봤더니
다행히 Stream은 Java 8부터 지원을 했고 Java 8은 2014년 3월 18일에 발표되었다고 한다.
나 공부할땐 채신기술이라 안가르쳐줬었다는 핑계를 댈수있게 되었다.

그런데 왠지 나만 Stream 모르는거 같고 나만 Stream 안쓰는거 같고
그래서 Stream을 어디다가 한번 써보기로 마음을 먹었다.


지나가던 알고리즘 문제

입력받은 문자열의 Isogram 여부를 반환해라.
대소문자를 구별하지 않는다고 하자.
아이소그램은 각 알파벳을 한 번씩만 이용해서 만든 단어나 문구를 말한다.

public boolean isIsogram(String str) {
	너의 꿈을 펼쳐봐
}

먼저 Stream을 쓰지 않은 순진한 녀석을 봐보자

public boolean isIsogram(String str) {
	String upperStr = str.toUpperCase();
    for (int i = 0; i < upperStr.length(); i++) {
        for (int j = i + 1; j < upperStr.length(); j++) {
            if(upperStr.charAt(i) == upperStr.charAt(j)) {
                return false;
            }
        }
    }
    return true;
}

항상 늘 먹던 O(n2n^2)의 익숙한 맛이 난다.
한글자 한글자 정성들여 비교를 통해 입력받은 문자열이 Isogram한지 확인한다.

Stream Stream 신나는 기능 나도 한번 불러본다

이번엔 나만빼고 다 쓰는것 같은 좀 노는 것 같은 Stream을 이용하여 풀어본 녀석을 봐보자

public boolean isIsogram(String str) {
	return str.chars().map(Character::toUpperCase).distinct().count() == str.length();
}

???
너무 머싯자나.. 코드량 차이 실화냐..(억지 조금 보탬)
열심히 for문 적는 시간에 Stream 삽질을 통해 익숙해지면
for문 작성 고통과 범위 체크의 고통에서 벗어날 수 있지 않을까 라는 생각이 들었다.
Stream 이녀석 심지어 병렬 처리로 실행 속도까지 빠르다고 한다. ㄷㄷ
그런데 Stream 아직 너무 어렵다.
여기저기 마구 가져다 써보면서 친해져야겠다.😄


profile
자그마한 개미

0개의 댓글