티스토리 뷰

Java

스트림

Alledy 2019. 5. 13. 17:07

스트림(Stream)

  • 스트림은 데이터소스를 추상화하고 자주 사용되는 메서드를 정의해놓았다. 데이터 소스 추상화는 데이터 소스가 무엇이던 간에(ArrayList이든 Array이든) 같은 방식으로 다룰 수 있게 되었다는 것과 코드 재사용성이 높아졌다는 것을 의미한다.

  • 예시

    // 배열과 배열리스트 
    String[] strArr = {"a", "b", "c"};
    List<String> strList = Arrays.asList(strArr); 
    
    // 스트림 생성
    Stream<String> strStream1 = Arrays.stream(strArr);
    Stream<String> srtStream2 = strList.stream();
    
    // 스트림 정렬 및 출력
    strStream1.sorted().forEach(System.out::println);
    strStream2.sorted().forEach(System.out::println);
    
    // 기존의 정렬 및 출력
    Arrays.sort(strArr); 
    Collections.sort(strList);
    
    for(String str : strArr) {
        System.out.println(str);
    }
    
    for(String str : strList) {
        System.out.println(str); 
    }
    

    위 예시에서 두 스트림의 데이터소스는 다르지만 정렬 및 출력 문법이 동일하다.

  • 스트림의 특성

    • immutable이다. 데이터 소스를 읽기만 할 뿐 변경하지 않는다. 재사용을 위해서는 컬렉션이나 배열에 담아서 반환할 수 있다.

    • 일회용이다. Iterator처럼 일회용이므로 한 번 사용하면 다시 사용할 수 없다. 필요하다면 다시 생성해야 한다.

    • 작업을 내부반복으로 처리한다. 즉 메서드 내부에 반복문을 숨긴다. forEach()가 그 예이다.

    • 스트림의 연산 예시

      • 중간 연산: filter(), sorted(), map(), flatMap(), limit() 둥
      • 최종 연산: reduce(), collect()

'Java' 카테고리의 다른 글

JDBC  (0) 2019.05.22
직렬화  (0) 2019.05.14
I/O programming  (0) 2019.05.13
컬렉션 프레임워크, ArrayList, LinkedList  (0) 2019.05.13
인터페이스(Interface)  (0) 2019.05.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함