티스토리 뷰

java_basic

Lambda 기초4 중간연산1

✨✨✨✨✨✨✨ 2022. 2. 14. 01:29
반응형

자바의 정석 ch14 26~29 스트림의 중간연산(1)

1. 스트림의 중간연산 스트림 자르기(1/7)

가. skip()

해설 : 앞에서부터 n개 건너뛴다.

사용법 :

Stream<T> skip(long n);

 

나. limit()

해설 : maxSize 이후의 요소는 잘라낸다.

사용법 :

Stream<T> limit(long maxSize)

예제 :

IntStream intStream = IntStream.rangeClosed(1, 10); // 12345678910
intStream.skip(3).limit(5).forEach(System.out::print) //45678

 


2. 스트림의 중간연산 스트림의 요소 걸러내기(2/7)

가. distinct()

해설 : 중복제거

사용법 :

Stream<T> distinct()

예제 :

IntStream intStream = IntStream.of(1,2,2,3,4,5,5,6,7,7,7);
intStream.distinct().forEach(System.out::print); //1234567

 

나. filter()

해설 : 조건에 맞는 데이터만 남기고 모두 제거

사용법 :

Stream<T> filter(조건식)

예제 :

// filter 중간연산자 2번사용해서 2,3의 배수 
IntStream intStream = IntStream.rangeClosed(1, 10);
intStream.filter(i->i%2==0).filter(i->i%3==0).forEach(System.out::print);
// filter안에 and 조건 사용하기
IntStream intStream = IntStream.rangeClosed(1, 10);
intStream.filter(i->i%2==0 && i%3==0).forEach(System.out::print);

3. 스트림의 중간연산 스트림의 요소 걸러내기(3/7)

가. sorted()

해설 : 해당 정렬조건에 맞게 정렬한다.

사용법 :

Stream<T> sorted();
Stream<T> sorted(비교조건);

 

문자열 스트림 정렬 방법 출력결과
strStream.sorted() //기본정렬
strStream.sorted((s1, s2) -> s1.compareTo(s2)) //람다식도 가능
strStream.sorted(String::compareTo); //위 문장과 동일
CCaaabccdd
strStream.sorted(Comparator.reverseOrder()) //기본 정렬의 역순 ddccbaaaCC
strStream.sorted(String.CASE_INSENSITICE_ORDER) //대소문자 구분안함 aaabCCccdd
strStream.sorted(String.CASE_INSENSITICE_ORDER.reversed()) //대소문자 구분안함 ddCCccbaaa
strStream.sorted(Comparator.comparing(String::length)) // 길이순 정렬
strStream.sorted(Comparator.comparingInt(String::length)) //no오토박싱
bddCCccaaa

 

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

studentStream.sortede(Comparator.comparing(Student::getBan))    // 반별로 정렬
                          .forEach(System.out::print)

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

studentStream.sortede(Comparator.comparing(Student::getBan))    // 반별로 정렬
                          .thenComparing(Student::getTotalScore)                    // 총점별로 정렬
                          .thenComparing(Student::getName)                                // 이름별로 정렬
                          .forEach(System.out::print)

 

 

Student::getBan
--> 람다식으로 변경
(Student s) -> 참조변수.getBan()
--> (Student s) -> s.getBan()



결과 :
1.반에따라 역순정렬
2. 오름차순

 

[1금빛, 3, 300]
[6금빛, 3, 290]
[7금빛, 3, 180]
[4금빛, 3, 150]
[3금빛, 2, 100]
[2금빛, 1, 200]
[5금빛, 1, 200]


                              

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함