๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/Java

[Java] Stream API: stream์˜ ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ๊ณผ ์˜ˆ์‹œ ์ฝ”๋“œ

by HanaV 2023. 3. 21.
728x90

 ์ž๋ฐ”์—์„œ๋Š” ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์ด๋‚˜ ์ปฌ๋ ‰์…˜(collect Framework)์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋ณต๋ฌธ(if while ๋“ฑ๋“ฑ..)์ด๋‚˜ ๋ฐ˜๋ณต์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์ฝ”๋“œ๋Š” ๊ธธ์ด๊ฐ€ ๊ธธ๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋ฉฐ, ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ(๋งค๋ฒˆ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋„ฃ๊ณ  ์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ).
 ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฟผ๋ฆฌ์™€ ๊ฐ™์ด ์ •ํ˜•ํ™”๋œ ์ฒ˜๋ฆฌ ํŒจํ„ด์„ ๊ฐ€์ง€์ง€ ๋ชปํ–ˆ๊ธฐ์— ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ์ž‘์—…์„ ํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด Java8๋ถ€ํ„ฐ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋žจ์˜ ํŠน์„ฑ์„ ๊ฐ€์ง„ stream์ด๋ผ๋Š” API(๊ฐ์ฒด)๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
stream API๋Š” ์ •ํ˜•์ ์ธ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ์— ํŠนํ™”๋œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๋ฐ˜๋ณต๋œ ํ”„๋กœ๊ทธ๋žจ ์ž‘์—… ์—†์ด ๋น„๊ต์  ์ˆ˜์›”ํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์งง๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๋‹ค.
 
Stream API์˜ ํŠน์ง•
-๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ด์„œ ์ฝ๊ธฐ/์“ฐ๊ธฐ/์ˆ˜์ •ํ•˜๋Š”๋ฐ ์ตœ์ ํ™”๋œ ๋ฉ”์†Œ๋“œ ์ œ๊ณตํ•œ๋‹ค.
-Stream์€ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ collection๊ณผ ๋‹ฌ๋ฆฌ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€)
               >>b/c ์ตœ์ข… ์ถœ๋ ฅํ•˜๊ณ  ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•„๋ผ๊ธฐ ์œ„ํ•ด ๋‹ค ์‚ฌ๋ผ์ง(Customer ๋ชจ๋ธ)
-Stream์€ ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
-Stream ์—ฐ์‚ฐ์€ filter-map ๊ธฐ๋ฐ˜์˜ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ lazy์—ฐ์‚ฐ์„ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•จ
             >>์—ฌ๊ธฐ์„œ lazy ์—ฐ์‚ฐ์ด๋ž€, ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ ์•ˆ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ๋ฌด์กฐ๊ฑด ๋ชจ๋“  ๊ฒƒ์„ ์—ฐ์‚ฐํ•˜๋Š” Eager ์—ฐ์‚ฐ๊ณผ ๋ฐ˜๋Œ€ ๊ฐœ๋…์ด๋‹ค.
                 ์˜ˆ๋ฅผ ๋“ค๋ฉด, lazy๋Š” ๋ฐ์ดํ„ฐ A์— ๋Œ€ํ•ด์„œ ์ด๋ฏธ false๊ฐ€ ๋‚˜์™”์œผ๋ฉด, ๋‹ค๋ฅธ ์ค‘๋ณต๋œ A ๋ฐ์ดํ„ฐ๋„ ๊ณ„์‚ฐ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
-Stream ์—ฐ์‚ฐ์€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•œ๋‹ค.
 
Stream API์˜ ๋™์ž‘ ํ๋ฆ„
1. ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ด
2. Stream ์ƒ์„ฑ
 ์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  collection framwork์˜ ์ตœ์ƒ์œ„ ๊ฐ์ฒด๊ฐ€ Collection ๊ฐ์ฒด์ด๋‹ค. ์ด Collection ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” Stream() ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, Collection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋ชจ๋“  List์™€ Set collection์—์„œ๋„ stream() ๋ฉ”์†Œ๋“œ๋กœ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด์—์„œ๋„ stream์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ๋Š” Arrays ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ๋‹ค. ๋˜ํ•œ, ๊ธฐ๋ณธํƒ€์ž…์ธ int, long, doubleํ˜•์— ๋Œ€ํ•œ String ์ƒ์„ฑ์„ ์œ„ํ•œ IntStream, LongStream, DoubleStream ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค.

3. ์ค‘๊ณ„์—ฐ์‚ฐ(ํ•„ํ„ฐ-๊ฐ’์„ ๊ฑธ๋Ÿฌ๋ƒ„, ๋งต-๊ฐ’์— ๋ณ€ํ™”๋ฅผ ์คŒ etc..) 
 stream API์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ดˆ๊ธฐ stream์€ ์ค‘๊ณ„์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋˜ ๋‹ค๋ฅธ stream์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค(์ด๋•Œ, ์›๋ณธ ์ŠคํŠธ๋ฆผ์€ ์ €์žฅ๋œ๋‹ค.) ์ด๋Ÿฌํ•œ ์ค‘๊ณ„์—ฐ์‚ฐ์€ stream์„ ์ „๋‹ฌ ๋ฐ›์•„ stream์„ ๋ณ€ํ™˜ํ•˜๋ฏ€๋กœ, ์ค‘๊ณ„ ์—ฐ์‚ฐ์€ ์—ฐ์†์œผ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. stream์˜ ์ค‘๊ณ„์—ฐ์‚ฐ์€ ํ•„ํ„ฐ, ๋งต ๊ธฐ๋ฐ˜์˜ API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  lazy ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

                                1) ์ŠคํŠธ๋ฆผ ํ•„ํ„ฐ๋ง: filter(), distinct()
                                2) ์ŠคํŠธ๋ฆผ ๋ณ€ํ™˜: map(), flatMap()
                                3) ์ŠคํŠธ๋ฆผ ์ œํ•œ: limit(), skip()                                             

limit(): ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ถ€ํ„ฐ ์ „๋‹ฌ๋œ ๊ฐœ์ˆ˜๋งŒํผ์˜ ์š”์†Œ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆผ์„ ๋ฐ˜ํ™˜
skip(): ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ถ€ํ„ฐ ์ „๋‹ฌ๋œ ๊ฐœ์ˆ˜๋งŒํผ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ƒˆ๋กœ์šด  ์ŠคํŠธ๋ฆผ์„ ๋ฐ˜ํ™˜

                                4) ์ŠคํŠธ๋ฆผ ์ •๋ ฌ: sorted()
                                5) ์ŠคํŠธ๋ฆผ ์—ฐ์‚ฐ๊ฒฐ๊ณผ ํ™•์ธ: peek()
4. ์ตœ์ข…์—ฐ์‚ฐ
                1) ์š”์†Œ์˜ ์ถœ๋ ฅ: forEach()
                2) ์š”์†Œ์˜ ์†Œ๋ชจ: reduce()

์ฒซ๋ฒˆ์งธ์™€ ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค, ๊ทธ ๊ฒฐ๊ณผ์™€ ์„ธ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ๋˜๋‹ค์‹œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์•ž์„œ ์—ฐ์‚ฐํ•œ ๋‚ด์šฉ์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œ์‹œํ‚ด (consumer ๊ฐœ๋…๊ณผ ๋น„์Šท)

                3) ์š”์†Œ์˜ ๊ฒ€์ƒ‰: findFirst(), findAny()

๋‘˜ ๋‹ค ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๋ฅผ 1๊ฐœ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์ง๋ ฌ ์ฒ˜๋ฆฌํ• ๋•Œ๋Š” ๋‘˜ ๋‹ค ๋™์ผํ•œ ์š”์†Œ๋ฅผ ๋ฆฌํ„ด ํ•˜์ง€๋งŒ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” findFirst()๋Š” ๋ฌด์กฐ๊ฑด ์•ž์— ์žˆ๋Š” ๊ฐ’์„, findAny()๋Š” ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋Š” ๊ฐ’์„ ๋ฆฌํ„ดํ•จ.

                4) ์š”์†Œ์˜ ๊ฒ€์‚ฌ: anyMatch(), allMatch(), noneMatch()
                5) ์š”์†Œ์˜ ํ†ต๊ณ„: count(), min(), mac()
                6) ์š”์†Œ์˜ ์—ฐ์‚ฐ: sum(), average()
                7) ์š”์†Œ์˜ ์ˆ˜์ง‘: collect()

์ŠคํŠธ๋ฆผ์˜ ์š”์†Œ๋“ค์„ ํ•ฉ์นจ. joining ์“ฐ๋ฉด ํ•ฉ์น  ๋•Œ ์‚ฌ์ด์‚ฌ์ด ๋ญ ๋“ค์–ด๊ฐ€๋Š”์ง€ ์„ค์ •๊ฐ€๋Šฅ

 
 
Stream ์ƒ์„ฑ ๋ฐฉ๋ฒ•
1. List๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ

import java.util.stream.Stream;
import java.util.List;
import java.util.Arrays;
import java.util.stream.Collectors;

//1๋ถ€ํ„ฐ 10๊นŒ์ง€ ์ •์ˆ˜๋ฅผ ๋ฐ›๋Š” list์—์„œ 6๋ณด๋‹ค ์ž‘๊ณ  ์ง์ˆ˜์ธ ์š”์†Œ๋ฅผ ์ฐพ์•„ 10๋ฐฐ ์‹œํ‚จ list๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.

public class StreamExample {

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        list.stream() 
            .filter(i -> i<6) 
            .filter(i -> i%2==0) 
            .map(i -> i*10)  
            .collect(Collectors.toList()) 
            .forEach(result -> System.out.println(result + "\t"));
       }
}

console

20
40

์ˆœ์„œ๋ฅผ ๋ณด์ž๋ฉด
1. ๋จผ์ € ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
2. list.stream() : stream์„ ์ƒ์„ฑ
3. filter(i -> i<6) :6๋ณด๋‹ค ์ž‘์€ ๊ฐ’๋“ค์„ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ํ•„ํ„ฐ์—ฐ์‚ฐ
4. filter(i -> i%2 == 0) : 2๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 0์ธ(=์ง์ˆ˜) ๊ฐ’๋“ค๋งŒ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ํ•„ํ„ฐ์—ฐ์‚ฐ
5. map(i -> i*10) : ๊ฐ’์— 10์„ ๊ณฑํ•˜๋Š” map์—ฐ์‚ฐ
6. collect(Collectors.toList()), forEach: ์š”์†Œ๋“ค์„ ํ•ฉ์นœ ๋’ค ์ถœ๋ ฅํ•ด ๋‚ด๋Š” ์ตœ์ข… ์—ฐ์‚ฐ
 
2. ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ

import java.util.stream.Stream;
import java.util.List;
import java.util.ArrayList;

//list์— 1๋ถ€ํ„ฐ 4๊นŒ์ง€์˜ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋ผ.

public class StreamExample {

    public static void main(String[] args) {

        List<Integer> ll = new ArrayList<>();
        ll.add(4);
        ll.add(3);
        ll.add(2);
        ll.add(1);

        Stream<Integer> stream = ll.stream();
        stream.forEach(System.out::println);
       }
}

console

4
3
2
1

 
3. ๋ฐฐ์—ด๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ

import java.util.stream.Stream;
import java.util.stream.IntStream;
import java.util.ArrayList;

//1๋ถ€ํ„ฐ 5๊นŒ์ง€์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋ผ.

public class StreamExample {

    public static void main(String[] args) {
    	int[] arr = {1, 2, 3, 4, 5};
        IntStream stream2 = Arrays.stream(arr); //๋ฐฐ์—ด์ด String ํƒ€์ž…์œผ๋กœ ๋ฐ”๊ปด์„œ ๋“ค์–ด๊ฐ
        stream2.forEach(System.out::println);       
       }
}

console

1
2
3
4
5

 
4. ๊ฐ€๋ณ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ

import java.util.stream.Stream;

public class StreamExample {

    public static void main(String[] args) {
    	Stream<Double> stream3 = Stream.of(4.2, 2.5, 3.1, 3.9);
        stream3.forEach(System.out::println);     
       }
}

console

4.2
2.5
3.1
3.9

 
์ค‘๊ณ„์—ฐ์‚ฐ
1. ์ŠคํŠธ๋ฆผ ํ•„ํ„ฐ๋ง: ์ŠคํŠธ๋ฆผ์—์„œ ์ค‘๋ณต๋œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ํ™€์ˆ˜๋งŒ ๊ณจ๋ผ๋‚ด์‹œ์˜ค.

import java.util.stream.Stream;
import java.util.stream.IntStream;

public class StreamExample {

    public static void main(String[] args) {
    	IntStream stream4 = IntStream.of(7, 5, 5, 4, 2, 1, 4, 12, 6, 3);
        stream4.distinct()
               .filter(n -> n%2 !=0)
               .forEach(System.out::println);
       }
}

console

7
5
1
3

 
2. ์ŠคํŠธ๋ฆผ ๋ณ€ํ™˜: ๋‹ค์Œ์˜ ๋ฌธ์ž์—ด๋“ค์—์„œ ๊ฐ๊ฐ์˜ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜์‹œ์˜ค.

import java.util.stream.Stream;

public class StreamExample {

    public static void main(String[] args) {
    	 Stream<String> stream5 = Stream.of("Java", "HTML", "CSS", "JavaScript");
        stream5.map(s -> s.length())
               .forEach(System.out::println);
       }
}

console

4
4
3
10

 
2. ์ŠคํŠธ๋ฆผ ๋ณ€ํ™˜: ์—ฌ๋Ÿฌ ๋ฌธ์ž์—ด์ด ์ €์žฅ๋œ ๋ฐฐ์—ด์„ ๊ฐ ๋ฌธ์ž์—ด์— ํฌํ•จ๋œ ๋‹จ์–ด๋กœ ์ด๋ฃจ์–ด์ง„ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์‹œ์˜ค. (์ค‘๋ณต๋œ ๋‹จ์–ด๋Š” ์ œ๊ฑฐํ•˜์‹œ์˜ค.)

import java.util.stream.Stream;
import java.util.Arrays;

public class StreamExample {

    public static void main(String[] args) {
    	String[] str = {"I study Java", "I will study more", "I am hungry"};
        Stream<String> stream6 = Arrays.stream(str);
        stream6.flatMap(s -> Stream.of(s.split(" ")))
               .distinct()
               .forEach(System.out::println);
       }
}

console

I
study
Java
will
more
am
hungry

 
3. ์ŠคํŠธ๋ฆผ ์ œํ•œ

import java.util.stream.Stream;
import.java.util.stream.IntStream;

public class StreamExample {

    public static void main(String[] args) {
		IntStream stream7 = IntStream.range(0, 10);
        IntStream stream8 = IntStream.range(0, 10);
        IntStream stream9 = IntStream.range(0, 10);

        stream7.skip(4)
               .forEach(n -> System.out.print(n + " "));
        
                System.out.println("\n");
        
        stream8.limit(5)
               .forEach(n -> System.out.print(n + " "));

                System.out.println("\n");

        stream9.limit(7)
               .skip(3)
               .forEach(n -> System.out.print(n + " "));
       }
}

console

4 5 6 7 8 9

0 1 2 3 4

3 4 5 6

 
4. ์ŠคํŠธ๋ฆผ ์ •๋ ฌ

import java.util.stream.Stream;
import java.util.Comparator;

public class StreamExample {

    public static void main(String[] args) {
    	//์˜ค๋ฆ„์ฐจ์ˆœ Ascending
        Stream<String> stream10 = Stream.of("Park", "Kim", "Lee", "Hahm");
        stream10.sorted()
                .forEach(n -> System.out.print(n + " "));

                System.out.println("\n");
        
        //๋‚ด๋ฆผ์ฐจ์ˆœ Descending
        /*stream10.sorted(Comparator<T>.reverseOrder())
                .forEach(n -> System.out.print(n + " "));
            stream์€ ์žฌ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๋ฏ€๋กœ ๋˜ ์“ฐ๋ฉด ์•ˆ๋จ
        */
        Stream<String> stream11 = Stream.of("Bread", "Toast", "Sushi", "Cake");
        stream11.sorted(Comparator.reverseOrder())
                .forEach(n -> System.out.print(n + " "));

       }
}

console

Hahm Kim Lee Park

Toast Sushi Cake Bread

 
์ตœ์ข…์—ฐ์‚ฐ
1. ์š”์†Œ์˜ ์†Œ๋ชจ: 1๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ํ•ฉ

import java.util.stream.Stream;
import java.util.Optional;

public class StreamExample {

    public static void main(String[] args) {
		Stream<Integer> stream12 = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Optional<Integer> sum = stream12.reduce((x,y) -> x+y);
        sum.ifPresent(s -> System.out.println("sum = " + s)); //1+2=3, 1 2 ์‚ญ์ œ -> 3+3=6, 3 3 ์‚ญ์ œ -> 6+4=10, 6 4 ์‚ญ์ œ ...


       }
}

console

sum = 55

 
2. ์š”์†Œ์˜ ์ˆ˜์ง‘

import java.util.stream.Stream;

public class StreamExample {

    public static void main(String[] args) {
		Stream<String> fruits = Stream.of("banana", "apple", "strawberry");
        String result = fruits.map(Object::toString)
                              .collect(Collectors.joining(", "));

                              System.out.println(result);
       }
}

console

banana, apple, strawberry

*๋ฐ์ดํ„ฐ ํƒ€์ž…์ด stream์ž„
๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด String์ธ ๋ฐฐ์—ดํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค.

import java.util.stream.Stream;

public class StreamExample {

    public static void main(String[] args) {
		Stream<String> fruits = Stream.of("banana", "apple", "strawberry");
        String result = fruits.map(Object::toString)
                              .collect(Collectors.toList())
                              .toString();

                              System.out.println(result);
       }
}

console

[banana, apple, strawberry]

 
 
 
์˜ˆ์ œ๋ฌธ์ œ 1: ์—ด๊ฑฐ๋œ ๋ฌธ์ž์—ด ์ค‘์—์„œ a๋ฅผ ํฌํ•จํ•œ ๋‹จ์–ด๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.
๋ฌธ์ž์—ด: aa, ao, oo, bo, ab
์ ‘๊ทผ ๋ฐฉ๋ฒ•: ์ œ์‹œ๋œ ๋ฌธ์ž์—ด ์ค‘์—์„œ a๊ฐ€ ํฌํ•จํ•œ ๋‹จ์–ด๋ฅผ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ๊ฒƒ์ด๋ฏ€๋กœ filter()์„ ์‚ฌ์šฉํ•˜์ž

Stream<String> stream = Stream.of("aa", "ao", "oo", "bo", "ab");
System.out.println(stream.filter(n -> n.contains("a"))
						 .collect(Collectors.joining(", ")));

console

aa, ao, ab

 
์˜ˆ์ œ๋ฌธ์ œ 2: ์—ด๊ฑฐ๋œ ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ๋ฐ”๊พธ์‹œ์˜ค.
๋ฌธ์ž์—ด: a, b, c
์ ‘๊ทผ๋ฐฉ๋ฒ•: ๋ฌธ์ž์—ด์„ ๋ณ€ํ™˜์‹œ์ผœ์•ผ ํ•˜๋ฏ€๋กœ map()์„ ์‚ฌ์šฉํ•˜์ž

Stream<String> stream = Stream.of("a", "b", "c");
stream.map(s -> s.toUpperCase())
                 .forEach(System.out::println);

console

A
B
C
728x90

"); wcs_do();