본문 바로가기
Programming/Java

스트림

by Tarake 2024. 8. 13.

스트림(Stream)


스트림은 데이터의 흐름을 표현하는 것으로, 데이터를 필터링, 매핑, 정렬, 집계하는 등의 다양한 연산을 선언적으로 수행할 수 있습니다. 스트림은 데이터 소스를 통해 생성되며, 연산을 통해 처리됩니다.

 

스트림 생성하기


컬렉션에서 생성

import java.util.*;
import java.util.stream.*;

class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");
        Stream<String> stream = list.stream();
    }
}

배열에서 생성

import java.util.*;
import java.util.stream.*;

class Main {
    public static void main(String[] args) {
        String[] array = {"a", "b", "c"};
        Stream<String> stream = Arrays.stream(array);
    }
}

스트림 빌더를 사용하여 생성

import java.util.*;
import java.util.stream.*;

class Main {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("a", "b", "c");
    }
}

 

 

스트림 연산


filter : 조건에 맞는 요소만을 포함하는 새로운 스트림을 반환합니다.

import java.util.*;

class Main {
    public static void main(String[] args) {
        String[] array = {"a", "b", "c"};
        Arrays.stream(array)
              .filter(n -> n.equals("a"))
              .forEach(n -> System.out.println(n));    // a 출력
    }
}

map : 각 요소를 변환하는 새로운 스트림을 반환합니다.

import java.util.*;

class Main {
    public static void main(String[] args) {
        String[] array = {"a", "b", "c"};
        Arrays.stream(array)
               .map(n -> n + "abc")
               .forEach(n -> System.out.println(n));    // aabc \n babc \n cabc 출력
    }
}

sorted: 스트림의 요소를 정렬합니다.

import java.util.*;

class Main {
    public static void main(String[] args) {
        String[] array = {"b", "a", "c"};
        Arrays.stream(array)
                .sorted()
                .forEach(n -> System.out.println(n));    // a \n b \n c 출력
    }
}

 

 

최종 연산


forEach: 스트림의 각 요소에 대해 작업을 수행합니다.

import java.util.*;

class Main {
    public static void main(String[] args) {
        String[] array = {"b", "a", "c"};
        Arrays.stream(array)
                .sorted()
                .forEach(System.out::println);    // a \n b \n c 출력
    }
}

collect: 스트림의 요소를 컬렉션으로 수집합니다.

import java.util.*;
import java.util.stream.Collectors;

class Main {
    public static void main(String[] args) {
        String[] array = {"b", "a", "c"};
        List<String> lst =  Arrays.stream(array)
                                  .sorted()
                                  .collect(Collectors.toList());
        for(String s : lst) {
            System.out.println(s);    // a \n b \n c
        }
    }
}

reduce: 스트림의 요소를 결합하여 단일 결과를 생성합니다.

import java.util.*;

class Main {
    public static void main(String[] args) {
        String[] array = {"bc", "acs"};
        Optional<Integer> lst =  Arrays.stream(array)
                                  .map(String::length)
                                  .reduce((a,b) -> a+b);

        System.out.println(lst);    // Optonal[5] 출력
    }
}

count: 스트림의 요소 개수를 반환합니다.

import java.util.*;

class Main {
    public static void main(String[] args) {
        String[] array = {"bc", "acs"};
        long lst =  Arrays.stream(array)
                                  .count();

        System.out.println(lst);
    }
}​

 

'Programming > Java' 카테고리의 다른 글

I/O 스트림  (0) 2024.08.14
람다  (0) 2024.08.11
중첩 클래스  (0) 2024.08.11
열거형, 가변인자, 어노테이션  (0) 2024.08.11
컬렉션 프레임워크  (0) 2024.08.10