본문 바로가기

수업 & 공부

Stream

Stream

java8 버전부터 lambda와 함께 Stream기능을 제공한다.

Stream은 흐름이라는 뜻으로 배열, 컬렉션 객체 요소를 효율적으로 다룰 수 있고

람다식을 지원하여 코드가 간결하다는 장점이 있다.

 

특징

원본 데이터 자체를 변경하지 않는다

한번 사용하면 닫혀서 재활용(재사용) 이 불가능하다

내부 반복문으로 처리하여 코드가 간결해 보인다

 

 

1. 여러가지 방법으로 Stream 생성하기

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

public class StreamBasic {

    public static void main(String[] args) {
        //Array
        String[] arr1 = new String[]{"111","222","333"};
        Stream<String> stream1 = Arrays.stream(arr1);
        stream1.forEach(System.out::println);
        System.out.println();
       

        Stream<String> stream2 = Arrays.stream(arr1, 0, 1);
        stream2.forEach(System.out::println);
        System.out.println();

        //Collection method
        List<String> list = Arrays.asList("aaa","bbb","ccc");
        Stream<String> stream3 = list.stream();
        stream3.forEach(System.out::println);
        System.out.println();
        //aaa
        //bbb
        //ccc

        //builder
        Stream<String> stream4 =
                Stream.<String>builder()
                        .add("빌더1").add("빌더2").add("빌더3")
                        .build();
        stream4.forEach(System.out::println);
        System.out.println();
        //빌더1
        //빌더2
        //빌더3

        //stream generate
        Stream<String> stream5 =
                Stream.generate(()-> "생성요소").limit(3);
        stream5.forEach(System.out::println);
        System.out.println();
        //생성요소
        //생성요소
        //생성요소

        //stream iterate
        Stream<Integer> stream6 =
                Stream.iterate(2, n->n*2).limit(10);
        stream6.forEach(System.out::println);
        //2
        //4
        //(생략)
        //1024
    }
}

 

2. Stream 중간연산으로 가공하기

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

//중간연산
public class intermediateOperation {
    public static void main(String[] args) {
        List<String> list1 = Arrays.asList("a","ab","abc","abcd","abc");
        List<Integer> intList = Arrays.asList(1,7,2,3,6,5);

        // 중간연산
        List<String> result = list1.stream()
                .filter(x-> {
                    System.out.println(x+ " in filter method");
                    return x.length() >=2;
                }).map(x-> {// 특정 형태로 변환
                    System.out.println(x + " in map method");
                    return x.toUpperCase();
                }).limit(3)
                .collect(Collectors.toList());

        System.out.println(result);

        // 필터링
        Stream<String> list2 = list1.stream().filter(s -> s.length() == 3);
        System.out.println("filter "+Arrays.toString(list2.toArray()));

        Stream<String> list3 = list1.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length() == 2;
            }
        });
        System.out.println("filter2 "+Arrays.toString(list3.toArray()));

        // 중복제거 distinct
        list1.stream().distinct()
                .forEach(System.out::println);

        //정렬
        Stream<Integer> intList2 = intList.stream().sorted();
        System.out.println(Arrays.toString(intList2.toArray()));
        Stream<Integer> intList3 = intList.stream().sorted(Comparator.reverseOrder());
        System.out.println(Arrays.toString(intList3.toArray()));
    }
}

'수업 & 공부' 카테고리의 다른 글

docker - zookeeper - KAFKA 참고 (KAFKA CLI)  (0) 2022.10.12
KAFKA  (0) 2022.10.07
Thread (lambda)  (0) 2022.10.03
lambda  (0) 2022.10.01
Wrapper Class란  (0) 2022.09.29