
💡Stream의 사용이유와 사용법
📘 반복문 없이 컬렉션 데이터를 필터링, 변환, 집계할 수 있는 기능
컬렉션.stream()
.중간연산()
.중간연산()
.최종연산();
//조건에 맞는 요소만 통과
filter(s. -> s.length() > 3)
//요소를 다른 형태로 변환
map(num -> num + 3)
//요소를 여러 스트림으로 펼쳐서 합침
fiatMap(s -> Arrays.stream(s.split("")))
//중복제거
distinct()
//정렬
sorted() or sorted(Comparator.reverseOrder()) //오름차순, 내림차순
//앞에서 n개만 꺼냄
limit(n)
//앞에서 n개를 건너뜀
skip(n)//각 요소에 대해 작업 수행
forEach(value -> System.out.println(value.name))
//결과를 모아서 컬렉션으로 반환
collect(Collectors.toList())
//배열로 변환
toArray(Integer[]::new) // new Integer[size];
//요소 개수 반환
count()
//하나라도 조건 만족하는지 검사
anyMatch(s -> s.equals("a"))
//모두가 조건 만족하는지 검사
allMatch(s -> s.length() > 0)
//아무것도 조건을 만족하지 않는지 검사
noneMatch(s -> s.isEmpty())
//첫 번재 요소 반환(Optional)
findFirst()
//아무 요소나 하나 반환(Optional)
findAny()//모든 숫자 합계
sum()
//평균 반환 (OptionalDouble)
average()
//최댓값, 최솟값 반환 (OptionalInt)
max(), min()
//값이 있으면 반환, 없으면 x 반환
orElse(x)
//값이 없으면 람다 호출로 기본값 설정
orElseGet(() -> "default")
//값이 없으면 예외 발생
orElseThrow()// 중간 연산을 함께 사용하는 방법(filter() + map())
// 요구사항 : 리스트에서 짝수를 찾아서 * 10
//리스트 생성
List<Integer> arrayList = Arrays.asList(1, 2, 3, 4, 5);
//Stream 으로 데이터 처리
List<Integer> ret = arrayList.stream() // 1. 데이터 흐름 준비 (1,2,3,4,5)
.filter(num -> num % 2 == 0) // 2. 중간 연산 등록 (짝수 찾기)
.map(num -> num * 10) // 3. 중간 연산 등록(* 10)
.collect(Collectors.toList());
//데이터 출력
System.out.println("ret :: "+ ret);
//ret :: [20, 40]
//리스트에 각 요소 * 10 처리
//리스트 생성 - 선언과 동시에 add 가능 (new 생성자 필요없음)
List<Integer> arrayList = Arrays.asList(1, 2, 3, 4, 5);
//for문 스타일
List<Integer> ret1 = new ArrayList<>();
for(Integer num : arrayList){
Integer multipliedNum = num * 10;
ret1.add(multipliedNum);
}
// stream 선언형 스타일
List<Integer> ret2 = arrayList.stream() // 1. 데이터 흐름 준비
.map(num -> num * 10) // 2. 중간 연산 등록 (함수)
.collect(Collectors.toList()); // 3. 최종 연산 단계 (반환값)