스트림

  • 자료의 대상과 관계 없이 동일한 연산을 수행
    배열이건, ArrayList건 상관 없이 동일한 방식으로 연산된다
    배열, 컬렉션을 대상으로 연산
    자료처리에 대한 추상화가 구현되었다고 한다

  • 한 번 생성하고 사용한 스트림은 재사용할 수 없다
    자료에 대한 스트림을 생성하여 연산을 수행했다면 스트림은 소모되고
    다른 연산을 하기 위해서는 다시 생성해야 한다

  • 스트림은 기존 자료를 변경하지 않는다
    자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간은 별도로 생성되므로 연산이 수행되어도 기존 자료에 대해 변경되지 않는다

  • 스트림의 연산은 중간 연산과 최종 연산으로 구분된다
    중간 연산은 여러 연산이 적용될 수 있지만 최종 연산은 마지막에 한 번 적용된다

  • 최종 연산이 호출되어야 중간 연산에 대한 수행이 이루어지고 결과가 생성된다
    그래서 중간 연산에 대한 결과를 연산 중간에 알 수 없다
    이를 지연 연산 이라고 한다

  • intArray 예제

  • int 형 array 만들고 각각의 요소를 출력 (forEach()사용)

int[] arr = {1, 2, 3, 4, 5};

for(int num : arr){
    System.out.println(num);
}
System.out.println();
Arrays.stream(arr).forEach(n -> System.out.println(n));

IntStream is = Arrays.stream(arr); // IntStream을 반환함
// Stream에 있는 메서드들은 자료형에 관계 없이 대부분 똑같음
is.forEach(n -> System.out.println(n)); //위에서 생성한 is로 연산을 한 번 하면
//is. 다시 못한다. 소모 되었다. 또 생성해야 한다.

int sum = Arrays.stream(arr).sum();
System.out.println(sum);
  • String ArrayList 예제
  • String형 ArrayList 만들고 정렬(sorted()사용), 스트림의 문자열의 길이를 반환받아 출력(map() 사용), 문자열의 길이가 5이상인 요소만 반환받아 출력(filter()사용)
List<String> sList = new ArrayList<String>();
sList.add("Tomas");
sList.add("Edward");
sList.add("Jack");

Stream<String> stream = sList.stream();
stream.forEach(s -> System.out.println(s));
sList.stream().sorted().forEach(s -> System.out.print(s + "\t"));
System.out.println();

sList.stream().map(s -> s.length()).forEach(s -> System.out.print(s + "\t"));
System.out.println();

sList.stream().filter(s -> s.length() >= 5).forEach(s-> System.out.println(s));
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글