본문 바로가기

프로그래밍/알고리즘(자바)

나누어 떨어지는 숫자 배열 Level 1

https://programmers.co.kr/learn/challenge_codes/89

나누어 떨어지는 숫자 배열 Level 1

roeuihyun 이 대단한 분이 한줄 코딩을 하셨다.


...

  return Arrays.stream(array).filter(factor -> factor % divisor == 0).toArray();

...


처음 보는 자바 문법이 나왔다. stream? filter?

그래서 하나하나 알아보았다.

stream ?

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

api를 찾아보았는데 stream은 순차, 병렬 집합 연산을 지원하는 시퀸스라고 한다. 

단순히 보자면 이 stream을 통해 연산을 쉽게 할 수 있다는 것인데 이 때문에 한 줄 코딩이 가능 한 것이다.

filter 는 괄호안의 내용으로 필터링을 하겠다고 이해하면 편할 것이다.

factor의 요소들을 ( factor % divisor ==0 ) 에 맞는 것들만 필터링 하는 것이다. 

여기서 factor는 배열의 각 원소를 순차적으로 불러 온 다음 stream을 toArray()메소드를 통해 다시 오브젝트 array 를 반환하여 정답을 호출할 수 있었다.

이 람다식을 이용한 간단한 코드가 있다.

다음 두 코딩은 같은 내용을 출력한다.

for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

IntStream.range(0, 10).forEach((int value) -> System.out.println(value));


Stream을 통해 한줄 코딩이 쉽게 가능한 것을 알 수 있다.