Java

Java Stream - Stream, map, collect()로 리스트 객체 가공

99duuk 2024. 10. 29. 11:04

rows는 Row라는 클래스의 객체 리스트.  List<Row> 타입

List<Row> rows = new ArrayList<>();
rows.add(new Row(1, "Alice", 10));
rows.add(new Row(2, "Bob", 20));
rows.add(new Row(3, "Charlie", 30));

 

rows는 Row 객체를 담고 있는 리스트. 이 리스트에 대해 .stream()을 호출하고, 그 다음 .map() 연산을 적용해 데이터를 변환할 수 있음

rows = rows.stream()
           .map(row -> {
               // 예를 들어 value 값을 2배로 만든 새로운 Row 객체를 반환한다고 가정
               return new Row(row.getId(), row.getName(), row.getValue() * 2);
           })
           .collect(Collectors.toList());

 

 

 

1. stream()으로 데이터 흐름을 연다:
- .stream()은 리스트나 컬렉션에 대해 데이터를 처리하기 위해 흐름을 여는 것.

- 데이터를 순차적으로 처리할 수 있는 스트림을 생성

   스트림을 생성하면, 이 데이터 흐름에서 여러 연산을 정의할 수 있음

 


2. map()으로 각 데이터를 변환하거나 처리한다.
- 열린 데이터 흐름(Stream)에 대해 .map()을 사용하면, 스트림 내의 각 요소에 대해 특정한 변환이나 처리를 정의하게 됨

- 예를 들어, 리스트에 들어있는 객체 하나하나에 접근해서, 이 객체를 어떻게 변환할지 지정함.

   map()은 변환된 결과를 새로운 스트림에 담아주기 때문에, 데이터를 가공하기 매우 유용

 


3. collect(Collectors.toList())로 변환된 객체를 리스트로 모은다.
- 스트림에서 데이터를 변환하거나 처리한 후에는, 결과를 원하는 형태로 모아야함

- .collect(Collect.toList())는 변환된 결과들을 리스트로 다시 모으는 역할 (수집! 리스트 모양으로!)

   그래서 최종적으로 변환된 결과들이 리스트 형태로 만들어지고, 이를 다시 원래 리스트(rows)에 할당하거나 새로운 리스트에 할당하게 됨.

 


 

+ collect()는 스트림의 최종 연산 중 하나, 데이터 처리 후 결과를 특정한 자료형으로 수집할 때 사용

    collect() 메서드는 Collector 객체를 인자로 받으며, 이 Collector가 어떤 자료 구조로 데이터 수집할지 정의해줌