[인프런 워밍업 클럽 BE + ]람다식/스트림 추가 학습하기!

3일차 과제는 조사 과제로, 함수형 인터페이스/람다/스트림 등의 광범위한 키워드를 알아봐야 했다. 검색하면 할수록 부족한 내 자신이 느껴졌다😂. 람다식의 문법 체계와 스트림 API를 문서로만 보았을 때는 나름 할만한데? 라는 생각이 들다가도, 직접 코드를 접하면 이해가 빠릿하게 되지 않는다니... 역시 나는 보는 것 만으로는 50프로도 흡수를 못하는 것 같다.

 

직접 예제를 만들어보기에는 개념도 겨우 잡는 학생이 시험 문제를 낸다는 느낌이기에, 어떻게 효과적으로 코드 작성하는 걸 공부할 수 있을까? 라는 고민에 빠지다 문득 생각이 들었다. 람다식과 스트림이라는 개념 자체를 몰랐을 적, 프로그래머스에서 나는 몇 줄에 거쳐 해결한 문제를 누군가가 스트림으로 한 줄 만에 풀이를 끝내는 걸 본 기억이...

 

그래서 나도 그 기억에 따라 프로그래머스의 기초 문제를 람다식과 스트림 API을 통해 푸는 연습을 해보기로 했다!

연습 범위는 lv0~lv1. 두 개념을 사용할 수 있는 문제들만 임의로 골라서 꾸준히 풀기!

문제 전문이나 정답 코드는 작성하지 않는다. 어디까지나 개인 연습용이라 최고 효율적인 답을 기대하고 풀이하지 않습니다.

 

문제가 막힐 때,

  1.  https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html 등의 문서 참조

  2. '다른 사람의 풀이' 보기!(최후 수단)

 

1.

IntStream을 이런 방식으로도 사용할 수 있다는 생각이 미처 닿지 못해, 부끄럽게도 첫 문제부터 다른 사람의 풀이를 참고하였다.

image

이번 키워드 메서드를 한 번 보자.

IntStream.range(0, strArr.length)
.mapToObj(...)
.toArray(...);

IntStream

  • range(n1, n2) - [n1,n2) 까지 순서대로 정렬된 연속된 값을 가진 IntStream 반환

    • [n1,n2]의 경우에는 rangeClosed(n1, n2)를 사용한다.

  • mapToObj(IntFunction<? extends U> mapper) - 스트림 요소에 주어진 함수를 적용한 결과로 구성된 객체 값 반환

 

image정확성 테스트 결과는 위와 같다.

이번 문제는 일반적인 반복문을 사용했을 때 압도적으로 빨랐다.

 

반복문 처리 하였을 때의 정확성 테스트 결과 이미지이다.

image