본문 바로가기
프로그래밍/Java & Spring

[스트림API] StreamAPI란 무엇인가? 사용예제

by 방구석개발자 2021. 6. 14.
반응형

서론

안녕하세요. 방구석 개발자 입니다.

실무에 사용하고자 StreamAPI 를 공부하고 적용시키려고 합니다.

그래서 사용한 예제를 몇가지 포스팅하겠습니다.

제가 사용한 예제는 공부목적으로 작성하였고 자바공식문서를 보면 더욱 더 많은 메소드가 있습니다.

또한 JAVA Stream API 는 간혹 기존 코드 보다 성능이 떨어진다는 이야기가 많습니다.

실무에 적용 할때는 더욱 주의 해야 될 거 같습니다.

StreamAPI 이란?

 스트림api는 자바8 부터 추가된 기능으로 컬렉션, 배열 등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를적용하며 반복적으로 처리할 수 있도록 해주는 기능입니다.

기존 코드 보다 가독성이 좋고 사용하기 편하게 되어 있습니다.

Stream 의 구조는 크게 3가지로 나뉩니다.

  • 스트림 생성
  • 중개 연산
  • 최종연산

이렇게 보면 너무 어려워서 사용 방법를 보면서 익히는게 더 좋아보입니다. 사용 방법 보시죠!

사용 방법

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

public class StreamAPI {

    public static void main(String[] args) {
        List<String> names = Arrays.asList("이승민","홍길동","김철수","강민수","고영희","차수박","신영수","김태우","김이나", "이승민");

        //list 복사
        List<String> sortingNames = names.stream().collect(Collectors.toList());

        //Stream 검색
        names.stream().filter(x -> x.contains("이")).forEach(x-> System.out.println("이 글자가 포함된 이름 : "+x));

        //Stream filter 여러개
        names.stream().filter(x -> x.contains("이")).filter(x -> x.contains("민")).forEach(x-> System.out.println("이,민 글자가 포함된 이름 : "+x));

        //count 확인
        long count = 0;
        count = names.stream().count();
        System.out.println("Count : " + count);

        //문자열에 추가 또는 삭제 또는 수정 map을 사용한다.
        names.stream().map(x -> x.concat(" 이름 뒤에 붙은 문자열 : ")).forEach(x -> System.out.println(x));

        //개수 정하기
        names.stream().limit(5).forEach(x -> System.out.println("limit5 : "+x));

        //정렬
        names.stream().sorted().forEach(x -> System.out.println("정렬 : "+x));
        names.stream().sorted(Comparator.reverseOrder()).forEach(x -> System.out.println("역순 정렬 : "+x));

        //중복 제거
        names.stream().distinct().forEach(x -> System.out.println("중복제거 : "+x));

        //최대, 최소값 구하기
        names.stream().min(Comparator.naturalOrder()).ifPresent(x-> System.out.println("최소값 : "+x));
        names.stream().max(Comparator.naturalOrder()).ifPresent(x-> System.out.println("최대값 : "+x));
    }
}

 

list 복사는 collect()함수를 사용합니다.

filter 함수를 사용하여 특정문자열로 뽑을 수 있습니다.

개수를 보고싶으면 count() 함수를 사용합니다.

정렬은 sorted() 메소드를 역정렬은 sorted(Comparator.reverseOrder())를 사용합니다.

중복제거는 distinct() 함수

최대, 최소값을 구할땐 min() , max() 함수를 사용합니다.

해당 사용 방법을 보면 계속 .(~).(~) 형태로 이어지는데 이것을 파이프 라인이라고 합니다. 다중 연산을 할 수 있습니다.

참고 자료

Java performance tutorial – How fast are the Java 8 streams?

Java 8 Friday: 10 Subtle Mistakes When Using the Streams API

반응형

댓글