Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- pointcut
- Proxy
- 그리디
- JDBC
- SpringBoot
- kotlin
- Servlet
- 알고리즘
- transaction
- Thymeleaf
- 스프링 핵심 원리
- 자바
- Android
- Greedy
- db
- 스프링 핵심 기능
- 인프런
- JPQL
- java
- QueryDSL
- Exception
- 김영한
- jpa
- spring
- springdatajpa
- http
- AOP
- Spring Boot
- 스프링
Archives
- Today
- Total
개발자되기 프로젝트
Stream 본문
1. Stream???
- 자료의 대상과 관계 없이 동일한 연산을 수행
- 배열, 컬렉션을 대상으로 연산을 수행
- 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 함
- 자료 처리에 대한 추상화가 구현되어 있음
- 한 번 생성하고 사용한 스트림은 재 사용 할 수 없음.
- 자료에 대한 스트림을 생성하여 연산을 수행하면 스트림은 소모됨
- 다른 연산을 수행하기 위해서는 스트림을 다시 생성해야 함.
- 스트림 연산은 기존 자료를 변경하지 않음
- 자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간은 별도로 생성됨.
- 따라서 연산이 수행되도 기존 자료에 대한 변경은 발생하지 않음
- 스트림 연산은 중간 연산과 최종 연산으로 구분됨
- 스트림에 대한 중간 연산은 여러 개의 연산이 적용될 수 있지만
- 최종 연산은 마지막 한 번만 적용됨
- 최종 연산이 호출되어야 중간 연산에 대한 수행이 이루어 지고, 그 결과가 만들어짐
- 따라서 중간 연산에 대한 결과를 연산 중에 알 수 없음.
- 이를 "지연 연산"이라 함.
2. 중간연산과 최종 연산
- 중간 연산 : filter(), map(), sorted() 등
- 조건에 맞는 요소를 추출(filter)하거나 요소를 반환(map)
- 최종 연산이 호출될 때 중간 연산이 수행되고 결과가 생성 됨
- 예시)문자열 리스트에서 문자열의 길이가 5이상인 요소만 출력하기
sList.stream().filter(s->s.length() >= 5).forEash(s->System.out.println(s));
- filter는 중간 연산이고 forEach()가 최종 연산
- 예시) 고객 클래스 배열에서 고객 이름만 가져오기
customerList.stream().map(c -> c.getName()).forEach(s->Systemout.printlnt(s));
- map()은 중간 연산이고, forEach()가 최종 연산
- 중간 연산과 최종 연산에 대한 "구현"은 람다식 활용
- 최종 연산 - sum(), forEach(), count() 등
- 최종 연산 이후에! 스트림은 더 이상 다른 연산을 적용할 수 없음.
3. 예시
public class StreamTest {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44};
//반복문
System.out.println("반복문 사용");
for (int num : arr) {
System.out.println("num = " + num);
}
System.out.println("=============================");
//stream
System.out.println("stream 사용");
Arrays.stream(arr).forEach(num -> System.out.println("num = " + num));
}
}
4. ArrayList, Stream
public class ArrayListStreamTest {
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
stringList.add("A");
stringList.add("D");
stringList.add("B");
stringList.add("C");
System.out.println("=====================");
stringList.stream().forEach(System.out::println);
System.out.println("=====================");
stringList.stream().map(s -> s.equals("A")).forEach(System.out::println);
System.out.println("=====================");
stringList.stream().filter(s -> s.equals("A")).forEach(System.out::println);
System.out.println("=====================");
stringList.stream().sorted().forEach(System.out::println);
System.out.println("=====================");
}
}
=====================
A
D
B
C
=====================
true
false
false
false
=====================
A
=====================
A
B
C
D
=====================
5. GitHub : 211027 Stream
'Java > 다양한 기능' 카테고리의 다른 글
reduce() (0) | 2021.10.28 |
---|---|
객체지향 프로그래밍 vs 람다식 구현 (0) | 2021.10.27 |
함수형 인터페이스, 람다식 구현 및 사용 (0) | 2021.10.27 |
람다식 (0) | 2021.10.27 |
익명 내부 클래스 활용 (0) | 2021.10.26 |
Comments