스트림(Stream) – 연산기능
자료의 대상과 관계없이 동일한 연산을 수행할 수 있는 기능(자료의 추상화)
배열 ,컬렉션에 동일한 연산이 수행되어 일관성 있는 처리 가능
한번 생성하고 사용한 스트림은 재사용할 수 없다.
스트림 연산은 기존 자료를 변경하지 않는다.
중간 연산과 최종 연산으로 구분된다.
최종 연산이 수행되어야 모든 연산이 적용되는 지연 연산
Stream 객체를 생성하고 배열에 대해서 연산을 할 때 그 배열을 직접 건들이지 않고 다른 메모리에서 연산이 이루어진다 모든 Integer 를 합치다던가 원래자료를 건들이지 않고 다른메모리에서 이루어진다.
중간연산 : 조건으로 자료를 필터한다. 꺼내온다.
최종연산 : 그거에 결과를 출력 , 그합을 구한다던가
Stream 연산을 중간연산은 이어서 할수있다 최종연산은 한번뿐
최종연산이 결과가 나와야 연산의 자료를 볼수있다 지연연산 이라고 한다.
이미지
중간연산 filter() , map()
조건에 맞는 요소를 추출 filter() 하거나 요소를 반환하는 map 이 있다.
문자열의 길이가 5 이상인 요소만 출력하기
forEach 는 하나씩출력을 해라 라는 뜻
sList.stream().filter(s->s.length() >= 5).forEach(s -> System.out.println(s));
스트림생성 중간 연산 최종 연산
고객클래스에서 고객 이름만 가져오기
Customerlist.stream().map(c->c.getName()).forEach(s -> System.out.println(s));
스트림 생성 중간 연산 최종연산
스트림에 최종연산은 람다식으로 쓰고있는걸 알수있다.
스트림 연산 – 최종 연산
스트림의 자료를 소모하면서 연산을 수행
최종 연산 후에 스트림객체를 담은 변수는 더 이상 쓸수없다 스트림을 생성하고 다시 해야 한다.
forEach() : 요소를 하나씩 꺼내온다.
Count() : 요소의 개수
Sum() : 요소의 합
이외에 여러가지 최종 연산이 있다.
package stream;
import java.util.Arrays;
public class IntArrayTest {
public static void main(String[] args) {
int [] arr = {1,2,3,4,5};
int sum = Arrays.stream(arr).sum(); // Array를 활용해서 스트림객체 생성
System.out.println(sum);
int count =(int) Arrays.stream(arr).count();
System.out.println(count);
}
}
package stream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class ArrayListStreamTest {
public static void main(String[] args) {
List<String> sList = new ArrayList<String>();
sList.add("Tomas");
sList.add("Edward");
sList.add("Jack");
Stream<String> stream = sList.stream(); // stream 메소드를 가져올수있다.
stream.forEach(s -> System.out.print(s + " "));
System.out.println();
// 한번만든 stream 은 가져다 쓸수없다.
sList.stream().sorted().forEach(s->System.out.print(s + " ")); // 정렬하고 하나씩 출력
// sorted는 comparable 이 구현이 되어있어서 그거에 의해 정렬이 됨
sList.stream().map(s->s.length()).forEach(n -> System.out.println(n)); // 이름에 대해서 길이 , 이름을 가져오는건 map
}
}
'JAVA Programming' 카테고리의 다른 글
[77] 예외와 예외처리 (0) | 2020.07.21 |
---|---|
[76] 스트림 reduce 연산을 정의 (프로그래머가 직접 지정하는 연산 적용) (0) | 2020.07.21 |
[74] 스트림 이란 ? 중간연산(map,filter) , 최종연산(forEach) (0) | 2020.07.20 |
[73] 람다식 이란? (0) | 2020.07.20 |
[72] 익명내부클래스 , 지역내부클래스 (0) | 2020.07.20 |