요소를 자를 떄 사용한다
skip(3)은 처음 3개의 요소를 건너 띄고 , limit(5)는 스트림의 요소를 5개로 제한
기본형 스트림에도 존재한다/ 반환값만 다름
Stream<T> filter(Predicate<? super T> predicate)
Stream distinct()
ex)
IntSteram a = Intstream.rangeclosed(1,10)
a.filter(i->i%==2).foreach(System.out::println) //짝수만 출력
Stream<T> sorted()
Stream<T> sorted(Comparator<? super T> comparator)
sorted() 는 지정된 Comparator로 스트림을 정렬하는데, Comparator대신 int값을 반환 하는 람다식을 사용하는 것도 가능하다. Comparator을 지정하지 않으면 스트림 요소의 기본정렬기준(comparable)으로 정렬한다. 스트림의 요소가 Comparable을 구현한 클래스가 아니면 예외 발생
sorted(Comparator.comparing(기준)) // Comparator static메서드
strStream.sorted() //기본정렬
strStream.sorted(람다식도 가능)
strStream.sorted(Comparator.reverseOrder())//역순 정렬
strStream.sorted(String.CASE_INSENSTIVE_ORDER)// 대소문자 구별 x
strStream.sorted(String.CASE_INSENSTIVE_ORDER,reversed())
strStream.sorted(comparator.comparing(String::length))// 길이순 정렬
- Comparator 인터페이스에 static 메서드와 디폴트 메서드가 많이 추가 되어서 이를 사용하면 정렬이 쉬워진다.
comparing(Function<T,U> keyExtractor)
comparing(Function<T,U> keyExtractor, Comparator<T> keyExtractor)
정렬조건 기본형인 경우
comparingInt(ToIntFunction<T> keyExtractor)
comparingLong(ToLongFunction<T> keyExtractor)
comparingDouble(ToDoubleFunction<T> keyExtractor)
매개변수 하나짜리를 사용하면 되고 그렇지 않은 경우 추가적인 매개변수로 정렬기준(Comparator) 을 따로 지정해 줘야한다.
정렬 조건 추가시 thenComapring() 사용
ex)
학생 스트림을 반(ban)별로, 성적순(totalScore)순 ,그리고 이름순으로 정렬하여 출력하면
studentStream.sorted(Comparator.comparing(Student::getBan)
.thenComapring(Student::getTotalScore)
.thenComapring(Student::getName)
.forEach(System.out::println);
메서드 참조에서 람다식으로 바꾸기
Student::getBan -> (Student s) -> s.get.Ban()
원하는 필드만 뽑아내거나 특정 형태로 변환해야 할떄 사용한다
중간연산이다.
- Stream<File> fileStream= Stream.of(new File("EX1.java)
- Stream<String>filenameStream=fileStream.map(File::getName)// 원하는 정보만 뽑아냄
- filenameStream.forEach(System.out::println)
요쇼를 문자가아닌 숫자로 반환 하는경우
Stream<Integer.> 가아닌 IntStream이 더 효율적이다
Stream<T.> -> 기본형 스트림
- IntStream ScoreStream = studentStream.mapToInt(Student::getTotalScore);
- int TotalScore=ScoreStream.sum();
(IntStrema, LongStream, DoubleStrem...)
int sum() //스트림 모든 요소의 총합
OptionalDouble average() // sum() / (double)count()
OptionalInt max() //스트림 요소 중 제일 큰값
OptionalInt min() // 스트미의 요소 중 제일 작은값
1. IntSummarayStatistics= scoreStream.summarayStatistics();
long totalCount=stat.getCount();
long totalSum=stat.getSum();
double avgScore=stat.getAverage();
int minScore= stat.getMin();
int maxScore= stat.getMax();
1.IntStream intStream= new Random().ints(1,46) //1~45 난수발생
2. Stream<String> lottoStream = intStream
.distinct()
.limit(6).sorted
.mapToObj(i->i+","); // 정수를 문자열로 변환
IntStream charStream="12345".chars();
int charSum=charStream.map(ch->ch-'0').sum() //기본형 메서드sum()
Stream<String> -> Intstream = mapToInt(Integer::parseInt)
Stream<Intger> -> Intstream = mapToInt(Integer::intValue)
flatMap()
Stream<T[]> -> Stream<T>
toArray()
-Stream<Stream<String.>> - >Stream<String[]>
Stream<String[]> strArrStrm = Stream.of(new String[]{"abc"});
Stream<Stream<String.>> = strStr=strArrStrm.map(Arrays::stream); // X
Stream<String> strStrm= strArrStrm.flatMap(Arrays::stream); //ok
Stream<Stream<String.>> - >Stream<String[]> =
매개변수를 지정하지 않으면 Object[]을 반환하므로 특정 타입의 생성자 지정해 줘야한다.
Stream<String[]> = strStr=strArrStrm
.map(s->s.toArray(String[]::new);