본문 바로가기

프로그래밍 언어/Java

1 Stream - boxed(). 이란 ?

stream은 원시타입을 다룰때 사용이 간편하고 Array를 사용할때 편하다.

 

그렇기 때문에 자주 사용하는 편인데 최근 한가지 오차에 빠졌다.

 

단순 배열을 .collect(Collectors.toList())를 사용해서 리스트로 변경할수 있을까 ?

 

답은 아니다. int[] 같은 원시타입의 경우 Stream에 담기 위해서는 객체형태로 변경이 되어야 하는데 해당 역할을 수행하는 것은 

MapToObj()라는 메소드이다.

 

해당 메소드를 통해 원시타입값을 객체로 바꾸고 스트림은 해당 타입을 이용한다.

 

그렇다면 원시타입을 List로 변경하려면 어떻게 해야 할까 ?

 

답은 boxed()의 사용이다.

 

해당 메소드의 내부 코드를 살펴보면

public final Stream<Integer> boxed() {
  return mapToObj(Integer::valueOf, 0);
}

위와 같이 MapToObj 메소드를 사용하는걸 볼수 있다.

 

그럼 이제 안다. boxed()를 사용해야 한다는걸 한가지 예를 들어 더 설명하면

int[] test1 = {1,2,3,4,5}가 존재한다고 하자.

해당 배열을 리스트로 바꾸기 위해서는

Arrays.stream(test1).collect(Collectors.toList())가 아니라  Arrays.stream(test1).boxed().collect(Collectors.toList())을 사용해야 한다.

 

'프로그래밍 언어 > Java' 카테고리의 다른 글

객체지향 설계 원칙 5가지  (0) 2022.02.08
Stream 사용 주의사항  (0) 2022.02.02
Arrays sort vs collections sort  (0) 2022.01.30
리스트를 돌릴땐 foreach를 사용하자 !  (0) 2022.01.30
스트림 상세  (0) 2022.01.29