스트림

Java 프로그래밍 - 스트림

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.OptionalInt;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class Main {

    public static void main(String[] args) {

//      1. 스트림 생성

//      1-1. 배열 스트림
        System.out.println("== 배열 스트림 == ");
        String[] arr = new String[]{"a", "b", "c"};

        System.out.println("== fori ==");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

        System.out.println("== forEach ==");
        for (String item: arr) {
            System.out.println(item);
        }

        System.out.println("== Stream ==");
        Stream stream1 = Arrays.stream(arr);
        stream1.forEach(System.out::println);

//      1-2. 컬렉션 스트림
        System.out.println("== 컬렉션 스트림 ==");
        ArrayList list1 = new ArrayList(Arrays.asList(1, 2, 3));
        System.out.println("list1 = " + list1);

        Stream stream2 = list1.stream();
        stream2.forEach(System.out::println);
//        stream2.forEach(num -> System.out.println("num = " + num));

//      1-3. 스트림 builder
        System.out.println("== 스트림 builder ==");
        Stream streamBuild = Stream.builder().add("a").add("b").add("c").build();
        streamBuild.forEach(System.out::println);


//      1-4. 스트림 generate
        System.out.println("== 스트림 generate ==");
        Stream streamGenerate = Stream.generate( () -> "abc" ).limit(3);
        streamGenerate.forEach(System.out::println);


//      1-5. 스트림 iterate
        System.out.println("== 스트림 iterate ==");
        Stream streamIterate = Stream.iterate(10, n -> n * 2).limit(3);
        streamIterate.forEach(System.out::println);


//      1-6. 기본 타입 스트림
        System.out.println("== 기본타입 스트림 ==");
        IntStream intStream = IntStream.range(1, 5);
        IntStream intStreamClosed = IntStream.rangeClosed(1, 5);
        System.out.println("==  IntStream.range(1, 5) ==");
        intStream.forEach(System.out::println);
        System.out.println("==  IntStream.rangeClosed(1, 5) ==");
        intStreamClosed.forEach(System.out::println);

//      2. 스트림 중개 연산

//      2-1. Filtering
        System.out.println("== Filtering ==");
        IntStream intStream2 = IntStream.range(1, 10).filter(n -> n % 2 == 0);
        intStream2.forEach(System.out::println);

//      2-2. Mapping
        System.out.println("== Mapping ==");
        IntStream intStream3 = IntStream.range(1, 10).map(n -> n + 1);
        intStream3.forEach(n -> System.out.print(n + " "));
        System.out.println();

//      2-3. Sorting
        System.out.println("== Sorting ==");
        IntStream intStream4 = IntStream.builder().add(5).add(1).add(3).add(4).add(2).build();
        IntStream intStreamSort = intStream4.sorted();
        intStreamSort.forEach(System.out::println);


//      3. 최종 연산

//      3-1. Sum, Average
        System.out.println("== sum, average ==");
        int sum = IntStream.range(1, 5).sum();
        double average = IntStream.range(1, 5).average().getAsDouble();

        System.out.println(sum);
        System.out.println(average);


//      3-2. Min, Max
        System.out.println("== min, max ==");
        int min = IntStream.range(1, 5).min().getAsInt();
        int max = IntStream.range(1, 5).max().getAsInt();
        System.out.println(min);
        System.out.println(max);


//      3-3. reduce
        System.out.println("== reduce ==");
        //연쇄적으로 합을 구해서 반환함.
        Stream<Integer> stream3 = new ArrayList(Arrays.asList(1, 2, 3, 4, 5)).stream();
        System.out.println(stream3.reduce((x, y) -> x + y).get());


//      3-4. forEach
        System.out.println("== forEach == ");
        IntStream.range(1, 10).filter(n -> n == 5).forEach(System.out::println);

    }
}
== 배열 스트림 == 
== fori ==
a
b
c
== forEach ==
a
b
c
== Stream ==
a
b
c
== 컬렉션 스트림 ==
list1 = [1, 2, 3]
1
2
3
== 스트림 builder ==
a
b
c
== 스트림 generate ==
abc
abc
abc
== 스트림 iterate ==
10
20
40
== 기본타입 스트림 ==
==  IntStream.range(1, 5) ==
1
2
3
4
==  IntStream.rangeClosed(1, 5) ==
1
2
3
4
5
== Filtering ==
2
4
6
8
== Mapping ==
2 3 4 5 6 7 8 9 10 
== Sorting ==
1
2
3
4
5
== sum, average ==
10
2.5
== min, max ==
1
4
== reduce ==
15
== forEach == 
5
// Practice
// 하기 예제를 스트림으로 구현해보세요.

import java.util.stream.IntStream;

public class Practice {
    public static void main(String[] args) {

        // 예제: 1~10 숫자 중 짝수 들의 합
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int sum = 0;

        for (int num: arr) {
            if (num % 2 == 0) {
                sum += num;
            }
        }
        System.out.println("sum = " + sum);


        // 스트림으로 구현
        int sum2 = IntStream.range(1, 11).filter(x -> x % 2 == 0).sum();
        System.out.println("sum2 = " + sum2);

    }
}
sum = 30
sum2 = 30

Tags:

Categories:

Updated:

Leave a comment