π/Java
[Java] μ€νΈλ¦Ό Stream
dar0m!
2021. 7. 28. 19:00
κ°λ
μ€νΈλ¦Όμ λ°λ³΅μ
μ€νΈλ¦Όμ 컬λ μ (λ°°μ΄ ν¬ν¨)μ μμλ₯Ό νλμ© μ°Έμ‘°ν΄μ λλ€μμΌλ‘ μ²λ¦¬ν μ μλ λ°λ³΅μμ΄λ€.
λλ€μ, μ€νΈλ¦Ό λ λ€ μλ° 8λΆν° μ¬μ© κ°λ₯
8μ΄μ μλ Iteratorλ₯Ό μ¬μ©ν¨
νΉμ§
1. λλ€μμΌλ‘ μμ μ²λ¦¬ μ½λλ₯Ό μ 곡νλ€.
- μ€νΈλ¦Όμ΄ μ 곡νλ λλΆλΆμ μμ μ²λ¦¬ λ©μλλ ν¨μμ μΈν°νμ΄μ€ λ§€κ°νμ μ κ°μ§λ€.
- λ§€κ°κ°μΌλ‘ λλ€μ λλ λ©μλ μ°Έμ‘°λ₯Ό λμ ν μ μλ€.
2. λ΄λΆ λ°λ³΅μλ₯Ό μ¬μ©νλ―λ‘ λ³λ ¬ μ²λ¦¬κ° μ½λ€.
- μΈλΆ λ°λ³΅μ(ex. Iterator)
- κ°λ°μκ° μ½λλ‘ μ§μ 컬λ μ μμλ₯Ό λ°λ³΅ν΄μ μμ²νκ³ κ°μ Έμ€λ μ½λ ν¨ν΄ - λ΄λΆ λ°λ³΅μ
- κ°λ°μ μ½λκ° λλ€μμ΄λκ³ , 컬λ μ μ λ΄λΆμ μΌλ‘ μμλ€μ λ°λ³΅νλ μ€νΈλ¦Όμ νμ©ν΄μ λλ€μμ μμλ§λ€ μ μ©μν΄.
- 컬λ μ λ΄λΆμμ μμλ€μ λ°λ³΅μν€κ³ κ°λ°μλ μμλΉ μ²λ¦¬ν΄μΌν μ½λλ§ μ 곡νλ ν¨ν΄ - λ΄λΆ λ°λ³΅μμ μ΄μ (Stream μ μ΄μ )
- κ°λ°μλ μμ μ²λ¦¬ μ½λμλ§ μ§μ€(iterator.next()κ°μ κ²μ νμ§ μμλ λ¨ μ€μ§ μ΄λ»κ² μ²λ¦¬νλμ§λ§ μ μν¨)
- λ©ν° μ½μ΄ CPUλ₯Ό μ΅λν νμ©νκΈ° μν΄ μμλ€μ λΆλ°°μμΌ λ³λ ¬ μ²λ¦¬ μμ μ ν μ μλ€. - λ³λ ¬(parallel) μ²λ¦¬
- parallelStream();
- νκ°μ§ μμ μ μλΈ μμ μΌλ‘ λλκ³ , μλΈ μμ λ€μ λΆλ¦¬λ μ€λ λμμ λ³λ ¬μ μΌλ‘ μ²λ¦¬ν ν, μλΈ μμ λ€μ κ²°κ³Όλ€μ μ΅μ’ κ²°ν©νλ λ°©λ² → μμ κ²°κ³Όκ° μμ°¨μ μ΄μ§ μμ
- μλ°λ ForkJoinPool νλ μμν¬λ₯Ό μ΄μ©ν΄μ λ³λ ¬ μ²λ¦¬λ₯Ό νλ€.
3. μ€νΈλ¦Όμ μ€κ° μ²λ¦¬μ μ΅μ’ μ²λ¦¬λ₯Ό ν μ μλ€.
- μ€κ° μ²λ¦¬ : Streamμ 리ν΄νλ€. μμλ€μ λ§€ν, νν°λ§, μ λ ¬ λ±
(filter, map, limit, skip, sorted) - μ΅μ’
μ²λ¦¬ : Streamμ 리ν΄νμ§ μλλ€. λ°λ³΅, μΉ΄μ΄νΈ, νκ· , μ΄ν© λ±
(collect, allMatch, count, forEach, min, max..)
4. μ€νΈλ¦Όμ λ°μ΄ν°λ₯Ό λ³κ²½νμ§ μμΌλ©° μΌνμ©μ΄λ€.
μ€νΈλ¦Ό μ’ λ₯
java.util.stream ν¨ν€μ§μμ μΈν°νμ΄μ€ νμ μΌλ‘ μ 곡
λͺ¨λ μ€νΈλ¦Ό μΈν°νμ΄μ€λ BaseStreamμ μμλ°κ³ μλ€. κ³΅ν΅ λ©μλκ° μ μλμ΄ μλ€.
Stream <T> | λ²μ© Stream |
IntStream | κ° νμ μ΄ IntμΈ Stream |
LongStream | κ° νμ μ΄ LongμΈ Stream |
DoubleStream | κ° νμ μ΄ DoubleμΈ Stream |
Streamμ μ€κ° μ°μ° λͺ λ Ήμ΄
Stream < T > distinct() | Streamμ μμ μ€λ³΅ μ κ±° |
Stream < T > sorted() | Stream μμ μ λ ¬ |
Stream < T > filter(Predicate < T > predicate) | 쑰건μ μΆ©μ‘±νλ μμλ₯Ό StreamμΌλ‘ μμ± |
Stream < T > limit(long maxSize) | maxSize κΉμ§μ μμλ₯Ό StreamμΌλ‘ μμ± |
Stream < T > skip(ling n) | μ²μ nκ°μ μμλ₯Ό μ μΈνλ stream μμ± |
Stream < T > peek(Consumer< T > action) | Tνμ μμμ λ§λ μμ μν |
Stream < R > flatMap(Function< T, stream<? extends R>> Tmapper) | Tνμ μμλ₯Ό 1:Nμ Rνμ μμλ‘ λ³ννμ¬ μ€νΈλ¦Ό μμ± |
Stream < R > map(Function<? super T, ? extends R> mapper) | μ λ ₯ Tνμ μ Rνμ μμλ‘ λ³νν μ€νΈλ¦Ό μμ± |
Stream mapToInt(),mapToLong(),mapToDobule() | λ§μ½ map Typeμ΄ μ«μκ° μλ κ²½μ° λ³ννμ¬ μ¬μ© |
Streamμ μ΅μ’ μ°μ° λͺ λ Ήμ΄
void forEach(Consumer <? super T> action) | Stream μ κ° μμμ μ§μ λ μμ μν |
long count() | Stream μ μμ κ°μ |
Optional < T > sum (Comparator <? super T> comparator) | Stream μ μμ ν© |
Optional < T > max (Comparator <? super T> comparator) | Stream μμμ μ΅λ κ° |
Optional < T > min (Comparator <? super T> comparator) | Stream μμμ μ΅μ κ° |
Optional < T > findAny() | Stream μμμ λλ€ μμ |
Optional < T > findFirst() | Stream μ 첫 λ²μ§Έ μμ |
boolean allMatch(Pradicate < T > p) | Stream μ κ°μ΄ λͺ¨λ λ§μ‘±νλμ§ boolean λ°ν |
boolean anyMatch(Pradicate < T > p) | Stream μ κ°μ΄ νλλΌλ λ§μ‘±νλμ§ boolean λ°ν |
boolean noneMatch(Pradicate < T > p) | Stream μ κ°μ΄ νλλΌλ λ§μ‘±νμ§μλμ§ boolean λ°ν |
Object[] toArray() | Stream μ λͺ¨λ μμλ₯Ό λ°°μ΄λ‘ λ°ν |
reduce μ°μ° | Stream μ μμλ₯Ό νλμ© μ€μ¬κ°λ©° κ³μ°νλ€. |
- Optional < T > reduce(Binary Operator<T> accumulator) - T reduce ( T identity, BinaryOperator<T> accumulator) - <U> U reduce (U indentity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) |
- .reduce((x,y) -> x > y ? x : y ); - .reduce(1, (x,y) -> x * y); - .reduce(0.0, (val1, val2) -> Double.valueOf(val1 + val2 / 10), (val1, val2) -> val1 + val2); |
collector μ°μ° | Streamμ μμλ₯Ό μμ§νμ¬ μμλ₯Ό κ·Έλ£Ήν νκ±°λ κ²°κ³Όλ₯Ό λ΄μ λ°ννλλ° μ¬μ©νλ€. |
- Collectors.toList() - Collectors.toSet() - Collectors.toMap() - Collectors.groupingBy - Collectors.partioningBy - Collectors.summarizingInt() |
μ°Έκ³
- https://www.youtube.com/watch?v=2D9NRBIKKCc
- https://www.youtube.com/watch?v=kgagzL33Hc4&list=PLVsNizTWUw7FPokuK8Cmlt72DQEt7hKZu&index=163
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=qkrghdud0&logNo=220702640712
- https://kils-log-of-develop.tistory.com/659?category=923003
- https://khj93.tistory.com/entry/JAVA-%EB%9E%8C%EB%8B%A4%EC%8B%9DRambda%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%82%AC%EC%9A%A9%EB%B2%95