자바 스트림을 이용해 맵에 있는 key, value 값을 객체로 만들어 보고 싶다.
map.forEach((key,value)-> new Object(key, value);
위와 같은 방법도 있지만 그냥 다른 방법을 사용해 보고 싶었고 객체를 생성해서 객체를 저장하는 리스트를 생성하고 싶은데 forEach를 통한 구현은 직관적이지 않고 stream의 병렬성을 갖고 가고 싶었다.
그래서 구글에 방법을 찾다 스택오버플로우 링크를 발견했다.
https://stackoverflow.com/questions/31763930/new-object-instantiation-when-using-java-8-streams
두가지 방법이 있는데
1번은
map.entrySet().stream().map(e -> new Object(e.getKey(), e.getValue()).collect(Collectors.toList());
이고
2번은
map.entrySet().stream().map(Object::new).collect(Collectors.toList());
이다.
스택오버플로우의 설명에 따르면 2번 방법이 바이트코드를 적게 생성하고 컴파일 단계에서 생성자로 바로 연결을 해주어 파일 사이즈에서 이득이 있지만 성능상 차이는 없다고 한다.
설명에 따르면 2방법 모두 사용가능하기에 알아서 잘 사용하자.