class Solution {
public int solution(int[] absolutes, boolean[] signs) {
return IntStream.rangeClosed(0,signs.length-1).map(i -> {
return !signs[i] ? -absolutes[i]: absolutes[i];
}).sum();
}
}
문제자체는 레벨1로 아주 쉽다. 그러나 stream
을 연습하기 위해 문제를 풀어보았다.
IntStream.rangeClosed(0,signs.length-1)
를 통해 0
부터 sings
의 크기만큼의 숫자 스트림을 생성한다. 그 다음 map
을 통해 각 객체를 -,+
로 변경해준다. 이후 sum()
함수를 통해 총합을 반환하면 끝이난다.
IntStream
과 Stream<Integer>
stream
의 경우 내부의 변수는final
로 간주되기 때문에 변하지 않는 값만을 이용할 수 있다. 만약에 동적인 값을 이용하고 싶다면AtomicInteger
를 이용하면 된다.
또한IntStream
과Stream<Integer>
는 다른 스트림인 것을 인지해야 한다.
IntStream
은int
를 이용하여 만든 스트림으로 객체가 아니다. 또한IntStream
만의 특수 기능을 이용할 수 있다.
반대로Stream<Integer>
는 객체를 이용하는 스트림으로IntStream
이 사용할 수 있는 특수 기능들을 사용 할 수 없다.
출처 : 프로그래머스 알고리즘