Stream에서 MapToObj() 란

SionBackEnd·2023년 1월 13일
0

자바 스터디

목록 보기
18/21

개요

인텔리제이를 이용해서 알고리즘을 푸는데 스트림을 사용할때 자꾸 인텔리제이가 map을 mapToObject로 변경하라고 옵션을 주길래 무지성으로 일단 빨간줄을 없애기 위해서 변경을 하였다.
근데 그래서 그게 뭔데?

설명

스트림에서는 일반적인 Stream 객체를 원시 타입 Stream으로 변환할 수 있는데 mapToObj는 그 반대라고 생각하면 된다.

  • 일반적인 Stream객체 : ex) Stream<String>
  • 원시 Stream : ex) IntStream.range(1,4)
Stream.of(1.0, 2.0)
	.mapToInt(Double::intValue)
    .mapToObj(String:valueOf)
    .collect(Collectors.toList());

위의 코드를 살펴보면 Stream<Double>이라는 객체를 of()메서드를 통해서 생성하고 메서드 체인으로 int 타입으로 변경했다.
여기서 mapToInt일반적인 Stream객체원시타입 IntStream으로 변경한것이고
그 이후 IntStreammapToObj(String.valueOf)메서드를 이용해서
원시타입 Stream에서 Stream<String>으로 변환하였다.

반성

어찌보면 자바에서 제공하는 무수한 메서드는 자꾸 써봐야지 손에도 익고 머리에도 오래저장되는것 같다.
이론 공부도 중요하지만, 실제 사용하게되는 메서드는 영어단어처럼 사용하는것만 사용하다보니 훈련을 많이 해야겠다.

추가로 알아둘것

Collectors.joining()

Stream에서 작업한 결과를 1개의 String으로 이어붙이기를 원하는 경우에 Collectors.joining()을 이용할 수 있다. Collectors.joining()은 총 3개의 인자를 받을 수 있는데, 이를 이용하면 간단하게 String을 조합할 수 있다.

delimiter : 각 요소 중간에 들어가 요소를 구분시켜주는 구분자
prefix : 결과 맨 앞에 붙는 문자
suffix : 결과 맨 뒤에 붙는 문자

String listToString = productList.stream()
	.map(Product::getName)
	.collect(Collectors.joining());
// potatoesorangelemonbreadsugar

String listToString = productList.stream()
	.map(Product::getName)
	.collect(Collectors.joining(" "));
// potatoes orange lemon bread sugar

String listToString = productList.stream()
  	.map(Product::getName)
  	.collect(Collectors.joining(", ", "<", ">"));
// <potatoes, orange, lemon, bread, sugar>

참고한 사이트

https://mangkyu.tistory.com/114

profile
많은 도움 얻어가시길 바랍니다!

0개의 댓글