스트림 자르기 - 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<? supter T> predicate - 조건에 맞지 않는 요소 제거(조건식)
Stream<T> distinct() - 중복 제거
IntStream.intStream = IntStream.of(1,2,2,3,3,3,4,5,5,5,6);
intStream.distinct.forEach(System.out::print); - 123456
IntStream intStream = IntStream.rangeClosed(1,10); - 12345678910
intStream.filter(i->i%2==0).forEach(System.out::printf); - 246810
intStream.filter(i->i%2!=0 && i%3!=0).forEach(System.out::printf); - 1,5,7
intStream.filter(i->i%2!=0).filter(i%3!=0).forEach(System.out::printf); -여러번도 가능
스트림 정렬하기 - sorted()
정렬 기본요소 1. 정렬대상 2. 정렬기준
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)
정렬 기준이 여러개
Stream<Student> studentStream = Stream.of(
new Student("이자바", 3, 300),
new Student("김자바", 1, 200),
new Student("안자바", 2, 100),
new Student("박자바", 2, 150),
new Student("소자바", 1, 200),
new Student("나자바", 3, 290),
new Student("감자바", 3, 180)
);
studentStream.sorted(Comparator.comparing(Student::getBan) // 반별 정렬
.thenComparing(Comparator.naturalOrder())) // 기본 정렬
.forEach(System.out::println);
}
}
class Student implements Comparable<Student> {
String name;
int ban;
int totalScore;
Student(String name, int ban, int totalScore) {
this.name =name;
this.ban =ban;
this.totalScore =totalScore;
}
public String toString() {
return String.format("[%s, %d, %d]", name, ban, totalScore);
}
String getName() { return name;}
int getBan() { return ban;}
int getTotalScore() { return totalScore;}
// 총점 내림차순을 기본 정렬로 한다.
public int compareTo(Student s) {
return s.totalScore - this.totalScore;
}
}
결과값
[김자바, 1, 200]
[소자바, 1, 200]
[박자바, 2, 150]
[안자바, 2, 100]
[이자바, 3, 300]
[나자바, 3, 290]
[감자바, 3, 180]
'하.. > java' 카테고리의 다른 글
| ch14 Optional<T> (0) | 2021.12.26 |
|---|---|
| ch14 스트림의 중간연산2 (0) | 2021.12.26 |
| ch14 스트림의 연산 (0) | 2021.12.26 |
| ch14 스트림 만들기 (0) | 2021.12.26 |
| ch14 스트림 스트림의 특징 (0) | 2021.12.26 |