반응형
Stream
1.자바 8에서 추가한 스트림(Streams)은 람다를 활용할 수 있는 기술 중 하나
2.자바 8 이전에는 배열 또는 컬렉션 인스턴스를 다루는 방법은 for 또는 foreach 문을 돌면서 요소 하나씩을 꺼내서 다루는 방법
3.간단한 경우라면 상관없지만 로직이 복잡해질수록 코드의 양이 많아짐
예제
- 문자 배열에 특정 값을 찾아서 출력
문자 배열
List<String> stringArrayList = new ArrayList<String>(
Arrays.asList("a", "b", "c", "d", "e", "f")
);
Iterator 사용
/* Iterator 사용 */
System.out.println("Iterator use");
Iterator<String> iterator = stringArrayList.iterator();
while (iterator.hasNext()) {
String value = iterator.next();
if ("b".equals(value)) {
System.out.println(value);
}
}
for each 사용
/* for each 사용 */
System.out.println("for each use");
for (String value : stringArrayList) {
if ("b".equals(value)) {
System.out.println(value);
}
}
stream 사용 1
stringArrayList.stream() // 스트림으로 가져와서
.filter(s -> "b".equals(s)) // "b" 값으로 필터
.forEach(s -> System.out.println(s)); // 출력
stream 사용 1 보다 좀더 줄여서 사용
stringArrayList.stream() // 스트림으로 가져와서
.filter("b"::equals) // equals 인자값이 "b" 로 대응되어 줄임
.forEach(s -> System.out.println(s)); // 출력
stream 사용 2 보다 좀더 줄여서 사용
stringArrayList.stream() // 스트림으로 가져와서
.filter("b"::equals) // equals 인자값이 "b" 로 대응되어 줄임
.forEach(System.out::println); // println 인자값이 forEach 인자값 대응되어 줄임
예제
- 숫자 배열로 stream 예제
숫자 배열
List<Integer> integerList = Arrays.asList(11, 5, 6, 1, 8, 0, 15, 8, 9, 10,1);
중복제거, 정렬
List<Integer> collect = integerList.stream()
.distinct() // 중복제거
.sorted() // 정렬
.collect(Collectors.toList()); // 리스트로 받음
중복제거, 정렬, 10보다 큰 값만 추출
List<Integer> collect1 = integerList.stream()
.distinct() // 중복제거
.sorted() // 정렬
.filter(integer -> integer > 10) // 10보다 큰 값만 필터
.collect(Collectors.toList()); // 리스트로 받음
특정 값 보다 큰 값이 있는지 찾기
boolean present = integerList.stream()
.distinct() // 중복제거
.filter(integer -> integer > 10) // 10보다 큰 값
.findAny() // 아무거나 하나
.isPresent(); // 존재 하는지
주의사항 - 딱 한번만 탐색 할 수 있다.
List<String> title = Arrays.asList("a", "b", "c");
Stream<String> s = title.stream();
s.forEach(System.out::println); // 출력됨
s.forEach(System.out::println); // IllegalStateException : 스트림이 이미 소비되었거나 닫힘
반응형
'개발 > java' 카테고리의 다른 글
java.lang.nullpointerexception 오류 예방 (0) | 2023.03.28 |
---|---|
Java Generics (0) | 2022.02.25 |
JSch를 사용한 JAVA SFTP 업로드 다운로드 예제 (개인키, 패스워스) (3) | 2021.08.18 |
현재 날짜 출력, 시간 원하는 형태로 출력, 날짜 포맷 (0) | 2021.01.18 |
System으로 연산 소요 시간 구하기 (0) | 2021.01.18 |
댓글