마트철수
[039] Java: 람다식, 스트림 본문
2024.07.03(수)
JAVA 11일차
클래스는 필드, 생성자, 메서드 → #필생메
상속은 메소드 오버라이딩, 다형성, 추상 → #메오다추
문자열은 String 타입 → substring, indexOf, split
main 메소드(혹은 생성자) 안에 위치하면 → 로컬 클래스
ch16 람다식
람다식
- 함수형 프로그래밍: 함수를 정의하고 이 함수를 데이터 처리부로 보내 데이터를 처리하는 기법
- 람다식: 데이터 처리부에 제공되는 역할을 하는 매개변수를 가진 중괄호 블록
# 람다식은 타입이 맞는 경우에만 넘길 수 있음
# 람다가 없었을 때에는 익명 구현 객체로 정의했었음
함수형 인터페이스
:인터페이스가 단 하나의 추상 메소드를 가지는 것 → 람다로 정의할 수 있음 ... ( ) -> { ... }
@FunctionalInterface: ... 인터페이스가 함수형 인터페이스임을 보장
매개변수가 없는 람다식
- 두 줄 이상이면 중괄호 필수 / 하나면 중괄호 생략 가능
매개변수가 있는 람다식
- 함수형 인터페이스의 추상 메소드에 매개변수가 있을 경우
# (매개변수, ...) -> 실행문
# 전달할 수 있는 인터페이스가 무엇인지 파악하는 것이 중요함
# static에서는 this 사용 불가
메소드 참조
: 메소드를 참조해 매개변수의 정보 및 리턴 타입을 알아내 람다식에서 불필요한 매개변수를 제거
: 단순화 가능 ... Math :: max;
# static 메소드인지 인스턴스 메소드인지 구분
▼ String a, String → a.compareTo(b)로 넘기면 됨 ▼

생성자 참조
(a, b) -> { return new 클래스(a, b); }, 클래스 :: new
ch17 스트림
스트림
: 흐름, 한 번 흘려보내면 다시 쓸 수 없음
내부 반복자
: 요소 처리 방법을 컬렉션 내부로 주입시켜서 요소를 반복 처리
ParallelStreamExample.java
Stream<String> parallelStream = list.parallelStream( ); ... 병렬로 처리
중간 처리와 최종 처리
: 컬렉션의 오리지널 스트림 뒤에 필터링 중간 스트림이 연결될 수 있고, 그 뒤에 매핑 중간 스트림이 연결될 수 있음
- 중간 처리와 최종 처리로 구분할 수 있음
- 최종 처리는 1개, 중간 처리는 N개
- 실제 데이터는 최종 처리가 호출될 때, 데이터가 흐르며 실행됨
- 중간 스트림들은 최종 처리를 위해 필터링, 매핑, 정렬하는 작업을 수행함
리소스로부터 스트림 얻기
: java.util.stream 패키지에는 BaseStream 패키지를 부모로 함
: Colletion과 배열 가장 많이 사용함 (★)
요소 걸러내기(필터링)
: 필터링은 요소를 걸러내는 중간 처리 기능 #데이터가 흐르지 않음
: 타입은 유지되나, 개수가 변경됨
- distinct( ) 메소드: 중복 제거
- filter( ) 메소드: true인 값만 리턴
- Predicate: 함수형 인터페이스 (하나만 정의되어있음)
# 람다식은 Functional Interface가 필요함 → 범용적으로 사용할 수 있도록 준비해둠
FilteringExample.java
list.stream( )
.distinct( )
.forEach( n -> sout(n));
요소 변환(매핑)
: 모든 function은 매개값을 리턴값으로 매핑하는 applyXxx( ) 메소드를 가짐
MapExample.java
studentList.stream( )
.mapToInt(s -> s.getScore())
.forEach(score -> sout(score));
> Student :: getScore 로 변경 가능
- 람다식 이해 > 메소드 참조 이해 > 메소드 참조로 대체할 수 있는지 생각
- 매개변수만 처리하는 경우만 메소드 참조 가능
'KB IT's Your Life > 교육' 카테고리의 다른 글
| [041] 프로그래머스: 유효한 괄호, 두 큐 합 같게 만들기, 괄호 회전하기, 주식 가격 (1) | 2024.07.05 |
|---|---|
| [040] 스트림: 매핑, 정렬, 루핑, 매칭, 집계 (0) | 2024.07.04 |
| [038] Java: 컬렉션 자료구조 (1) | 2024.07.04 |
| [037] Java: 제네릭, 컬렉션 자료구조 (1) | 2024.07.01 |
| [036] 프로그래머스: 완주하지 못한 선수, 소수 만들기, 예산 (1) | 2024.06.28 |