람다(Lambda)
- 현대적 프로그래밍 기법 = 객체지향 프로그래밍 + 함수적 프로그래밍
- 자바 8버전부터 함수적 프로그래밍 지원
스트림(Stream)
1. 람다식으로 요소 처리를 제공
2. 내부 반복자를 사용하므로 병렬처리가 쉽다.
-> 컬랙션 내부에서 객체를 반복시킬 것인가는 컬렉션에게 맡기고, 개발자는 객체 처리 코드에만 집중할 수 있다.
스트림은 '중간처리' 와 '최종처리'를 할 수 있다.
람다식과 스트림
import java.util.*;
import java.util.stream.Stream;
public class StreamEx01 {
public static void main(String[] args) {
List<Integer> list = (List) Arrays.asList(10,20,30,40,50);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
Integer value = iterator.next();
System.out.print(value + " ");
}
}
}
자바7 이전까지는 List<Integer> 컬렉션에서 요소를 순차적으로 처리하기 위해 Iterator를 사용해왔다.
import java.util.*;
import java.util.stream.Stream;
public class StreamEx01 {
public static void main(String[] args) {
List<Integer> list = (List) Arrays.asList(10,20,30,40,50);
Stream<Integer> stream = list.stream();
stream.forEach(value -> System.out.print(value+" "));
}
}
스트림 내부 반복자
- 스트림을 사용하여 컬렉션 내부에서 요소들을 반복시키고, 개발자는 요소당 처리해야할 코드만 제공하는 코드패턴이다.
스트림 중간처리, 최종 처리 메소드
filter - 걸러내기
distinct - 중복제거
sort - 정렬
limit - 스트림 자르기
count - 요소 개수 세기
- 중간처리 메소드와 최종처리 메소드를 쉽게 구분하는 방법은 리턴 타입을 보는 것이다.
리턴타입이 스트림이면 중간처리 메소드이고, 기본타입이거나 OptionalXXX라면 최종처리 메소드이다.
Customer.java
import java.util.*;
public class Customer {
// 맴버변수
private String name; // 이름
private int point_score; // 포인트 점수
// 생성자
public Customer(String name, int point_score){
this.name = name;
this.point_score = point_score;
}
public String getName() {
return name;
}
public int getPoint_score() {
return point_score;
}
}
LambdaEx.java
import java.util.*;
import java.util.stream.Stream;
public class LamdaEx {
public static void main(String[] args) {
List<Customer> list = (List) Arrays.asList(new Customer("손흥민",1500),
new Customer("박지성",700));
/*
[중요] 컬렉션으로부터 스트림 얻기 => List 컬렉션의 참조변수를 통해서
*/
Stream<Customer> stream = list.stream();
stream.forEach(s -> { // {} - 한문장 이상일 때는 중괄호를 생략하면 안된다.
String name = s.getName();
int score = s.getPoint_score();
System.out.println(name + "=> " + "포인트 점수" + score + "점");
});
}
}
메서드 참조
'😀Language > Java' 카테고리의 다른 글
[Test] contains를 이용한 테스트 (0) | 2024.10.27 |
---|---|
Arrays.asList() 와 List.of() 정리 (0) | 2024.10.17 |
정적 팩토리 메서드(Static Factory Method)란? (2) | 2024.10.03 |
Optional<T> isPresent(), ifPresent(), orElseThrow (0) | 2024.03.14 |
[Optional이란?] (0) | 2024.03.14 |