Posts 객체지향 프로그래밍 - 10(Stream API)
Post
Cancel

객체지향 프로그래밍 - 10(Stream API)

Stream API

특징

  • JAVA 8에 추가된 java.util.stream 패키지이다.
  • 컬렉션 요소를 람다식으로 처리할수 있도록 돕는 함수형 프로그래밍 도구이다.
    • 간결한 코드로 작성할 수 있다.
    • 데이터 소스에 대한 공통된 접근 방식을 유지한다.
    • 코드의 효율성은 기존과 크게 다르지 않다.
1
2
3
4
5
6
7
8
9
10
11
// JAVA 7이전 버전
        List<String> list = Arrays.asList("fast", "campus", "rocks");
        for (String s : list) {
            System.out.println(s.toUpperCase());
        }

        // JAVA8 Stream API 사용 버전
        List<String> list1 = Arrays.asList("fast", "campus", "rocks");
        Stream<String> stream = list1.stream();
        stream.map(String::toUpperCase) // uppercase로 매핑하고, 하나씩 출력한다.
                .forEach(System.out::println);

중간처리 메소드

  • 중간에서 메소드가 실행되어 스트림을 반환한다.
  • 필터링 메소드
1
2
3
4
        // distinct() : 스트림에 같은 요소가 있는 경우 하나만 남기고 다 삭제한다.
        stringStream.distinct().forEach(System.out::println);
        // filter() : Predicate 계열을 입력으로 받아, true인 요소만 남긴다.
        stringStream.filter(s -> s.length() >= 3).forEach(System.out::println);
  • 자르기
1
2
        skip(long n) : 스트림의 최초 n개를 생략하는 메소드
        limit(long maxSize) : 스트림의 최대 요소 개수를 maxSize로 제한
  • 정렬
1
2
3
4
5
 // 같은 기능을 수행하는 두 코드
        stringStream = Stream.of("Java", "Is", "Fun", "Isn't", "It", "?", "assfsg");
        stringStream.sorted().forEach(System.out::println);
        stringStream = Stream.of("Java", "Is", "Fun", "Isn't", "It", "?ass", "assfsg");
        stringStream.sorted((o1, o2) -> o1.length() - o2.length()).forEach(System.out::println);
  • 매핑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Function 계열의 인터페이스를 사용하여 스트림의 각 요소를 매핑
        stringStream = Stream.of("abs", "werghh", "werj", "qwgqqqqqu");
        // String->Integer로 변환하는 매핑 (Function<String, Integer>)
        Stream<Integer> stream2 = stringStream.map(s -> s.length());
        stream2.forEach(System.out::println);
        // PStream (기본형 타입의 스트림)
        IntStream intStream1 = IntStream.of(1,3,45,57,24,5,8,2);
        IntStream intStream2 = intStream1.map(value -> value * 10);
        intStream2.forEach(System.out::println);
        // flatMap 계열 매핑 입력1 : n출력 (스트림 형태로 출력)
        List<String> list2 = Arrays.asList("java" , "sdfsfd" ,"1234sdf", "asd");
        list2.stream().flatMap(s ->{
            return Arrays.stream(s.split(""));
        }).forEach(System.out::println);
  • 조회(peek)
1
2
3
4
5
// 조회 (Peek) : 중간 결과를 출력해볼 수 있음(디버깅시 유용)
        // peek() : Consumer 계열을 입력으로 받아 입력 요소를 소비
        list2.stream().flatMap(s ->{
            return Arrays.stream(s.split(""));
        }).peek(s -> System.out.println("flatMap : " + s))

Link

This post is licensed under CC BY 4.0 by the author.

Contents

Trending Tags