14-26~29 스트림의 중간연산(1)

oyeon·2021년 3월 22일
0

Java 개념

목록 보기
67/70

스트림 자르기 - skip(), limit()

Stream<T> skip(long n)		// 앞에서부터 n개 건너뛰기
Stream<T> limit(long maxSize)	// maxSize 이후의 요소는 잘라냄
IntStream intStream = IntStream.rangeClosed(1, 10);	// 12345678910
intStream.skip(3).limit(5).forEach(System.out::print)	// 45678

스트림의 요소 걸러내기 - filter(), distinct()

Stream<T> filter(Predicate<? super T> predicate) // 조건에 맞지 않는 요소 제거
Stream<T> distinct()				// 중복제거
IntStream intStream = IntStream.of(1,2,2,3,3,3,4,5,5,6);
intStream.distinct().forEach(System.out::print);	// 123456
IntStream intStream = IntStream.rangeClosed(1, 10);
intStream.filter(i -> i % 2 == 0).forEach(System.out::print); // 246810
intStream.filter(i -> i % 2 != 0 && i % 3 != 0).forEach(System.out::print);
// 중간 연산이므로 filter를 여러번 써도 된다.(위와 같은 결과)
intStream.filter(i -> i % 2 != 0).filter(i -> i % 3 != 0).forEach(System.out::print);

스트림 정렬하기 - sorted()

Stream<T> sorted()	// 스트림 요소의 기본 정렬(Comparable)로 정렬
Stream<T> sorted(Comparator<? super T> comparator) // 지정된 Comparator로 정렬

Comparator의 comparing()으로 정렬 기준을 제공

comparing(Function<T, U> keyExtractor)
comparing(Function<T, U> keyExtractor, Comparator<U> keyComparator)
studentStream.sorted(Comparator.comparing(Student::getBan)) // 반별로 정렬
		.forEach(System.out::println);

추가 정렬 기준을 제공할 때는 thenComparing()을 사용

thenComparing(Comparator<T> other)
thenComparing(Function<T, U> keyExtractor)
thenComparing(Function<T, U> keyExtractor, Comparator<U> keyComp)
studentStream.sorted(Comparator.comparing(Student::getBan) // 반별로 정렬
		.thenComparing(Student::getTotalScore)	// 총점별로 정렬
        	.thenComparing(Student::getName))	// 이름별로 정렬
            	.forEach(System.out::println);
profile
Enjoy to study

0개의 댓글