๐ย ์์
IntStream intStream = IntStream.rangeClosed(1, 10); //12345678910
intStream.skip(3).limit(5).forEach(System.out::print);
45678
๐ย ์์
IntStream intStream = IntStream.of(1, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7);
intStream.distinct().forEach(System.out::print);
1234567
IntStream intStream = IntStream.rangeClosed(1, 10);
intStream.filter(i -> i%2==0).forEach(System.out::print);
246810
Comparator๋ฅผ ์ฃผ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ์ ๋ ฌ (Comparable)๋ก ์ ๋ ฌ
๋ฌธ์์ด์คํธ๋ฆผ ์ ๋ ฌ ๋ฐฉ๋ฒ
Comparator์ comparing()์ผ๋ก ์ ๋ ฌ ๊ธฐ์ค์ ์ ๊ณต
Comparator์ธํฐํ์ด์ค์ static ๋ฉ์๋์ธ comparing()์ ์ด์ฉํ์ฌ ์ ๋ ฌ๊ธฐ์ค์ ์ ๊ณตํ ์ ์๋ค
๋น๊ต ๋์์ด ๊ธฐ๋ณธํ์ธ ๊ฒฝ์ฐ, ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ ๋ฐ์ฑ๊ณผ ์ธ๋ฐ์ฑ ๊ณผ์ ์ด ์์ด์ ํจ์จ์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ฌ ์กฐ๊ฑด์ ์ถ๊ฐํ ๋๋ themComparing()์ ์ฌ์ฉํ๋ค.
comparingInt(ToIntFunction<T> keyExtractor)
comparingLong(ToLongFunction<T> keyExtractor)
comparingDouble(ToDoubleFunction<T> keyExtractor)
๐ย ์์
ํ์ ์คํธ๋ฆผ(studentStream)์ ๋ฐ(Ban), ์ฑ์ (TotalScore), ์ด๋ฆ(Name) ์์ผ๋ก ์ ๋ ฌํ์ฌ์ ์ถ๋ ฅํ๊ธฐ
studentStream.sorted(Comparator.comparing(Student::getBan)
.thenComparing(Student::getTotalScore)
.theComparing(Student::getName))
.forEach(System.out::println);
์คํธ๋ฆผ์ ์์์ ์ ์ฅ๋ ๊ฐ ์ค์์ ์ํ๋ ํ๋๋ง ๋ฝ์๋ด๊ฑฐ๋ ํน์ ํํ๋ก ๋ณํํด์ผ ํ ๋ ์ฌ์ฉํ๋ค. ๋งค๊ฐ๋ณ์ T ํ์ ์ R ํ์ ์ผ๋ก ๋ณํํด์ ๋ฐํํ๋ ํจ์๋ฅผ ์ง์ ํด์ผ ํ๋ค.
Stream<R> map(Function<T, R> mapper) //Stream<T> -> Stream<R>
๐ย ์์
Stream<String> strStream = Stream.of("1", "2", "3");
strStream.map(Integer::parseInt).filter(x -> x>1).forEach(System.out::print);
23
์ฐ์ฐ๊ณผ ์ฐ์ฐ ์ฌ์ด์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๊ณ ์๋์ง ํ์ธํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
filter()๋ map()์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ค. (๋๋ฒ๊น ์ฉ๋)
Stream<T> peek(Consumer<T> action) //์ค๊ฐ ์ฐ์ฐ (์คํธ๋ฆผ์ ์๋น x)
void forEach(Consumer<T> action) //์ต์ข
์ฐ์ฐ (์คํธ๋ฆผ์ ์๋น o)
map()์ ์ฐ์ฐ๊ฒฐ๊ณผ๋ก ์ซ์์์๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ Stream๋ณด๋ค ๊ธฐ๋ณธํ ์คํธ๋ฆผ(IntStream)์ผ๋ก ๋ฐ๋ ๊ฒ์ด ์ ์ฉํ๋ค.
Stream<String> strStream = Stream.of("1", "2", "3");
IntStream intStream = strStream.mapToInt(Integer::parseInt);
๋ฐ๋๋ก IntStream์ Stream๋ก ๋ณํํ ๋๋ mapToObj()๋ฅผ, Stream๋ก ๋ณํํ ๋๋ boxed()๋ฅผ ์ฌ์ฉํ๋ค.
Stream<String> printStream = intStream.mapToObj(i -> i+", ");
printStream.forEach(System.out::print);
โ ย mapToInt()์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฉ์๋
mapToInt (Integer::parseInt) : Stream โ IntStream
mapToInt(Integer::intValue) : Stream โ IntStream
์คํธ๋ฆผ์ ์์๊ฐ ๋ฐฐ์ด์ด๊ฑฐ๋ map()์ ์ฐ์ฐ๊ฒฐ๊ณผ๊ฐ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ (Stream<T[]>), Stream๋ก ๋ค๋ฃจ๊ณ ์ถ์ ๋ flapMap()์ ์ฌ์ฉํ๋ค.
Stream<String[]> strArrStream = Stream.of(
new String[] {"A", "B", "C"},
new String[] {"a", "b", "c"});
์์ ์คํธ๋ฆผ์ Stream์ผ๋ก ๋ง๋ ๋ค.
Stream<String> strStream = strArrStream.flatMap(Arrays::stream);
strStream.map(String::toLowerCase)
.forEach(System.out::print);
abcabc