주니봉
  • [JAVA] Stream API
    2021년 02월 24일 18시 10분 47초에 업로드 된 글입니다.
    작성자: 봉주니

    Java Stream


     

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

    (InputStream, OutputStream같은 I/O Stream이 아니다.)

     

    List<String> names = Arrays.asList("jeong", "pro", "jdk", "java");
    
    // 기존의 코딩 방식
    long count = 0;
    for (String name : names) {
        if (name.contains("o")) {
            count++;
        }
    }
    System.out.println("Count : " + count); // 2
    
    // Iterator 방식
    long count = 0;
    Iterator<String> iter = names.iterator();
    while(iter.hasNext()){
    	String name = iter.next();
        if (name.contains("o")) {
            count++;
        }
    }
    System.out.println("Count : " + count); // 2
     
    // 스트림 이용한 방식
    count = 0;
    count = names.stream().filter(x -> x.contains("o")).count();
    System.out.println("Count : " + count); // 2
    

    불필요한 코딩(for, if 문법)을 걷어낼 수 있고 직관적이기 때문에 가독성이 좋아진다.


    Stream은 어떤 것들에 적용할 수 있을까?

     

    Stream은 주로 Collection, Arrays에서 쓰인다.

    물론 두 개 뿐만 아니라 I/O resources(ex. File), Generators, Stream ranges, Pattern 등에서도 사용할 수 있다.

    해당 객체들로 부터 Stream을 생성하는 법은 스스로 찾아보도록 하고 기본적으로 자주 쓰이는 것들만 간단히 소개한다.

     

    List<String> names = Arrays.asList("jeong", "pro", "jdk", "java");
    names.stream(); //Collection에서 스트림 생성
     
    Double[] dArray = {3.1, 3.2, 3.3};
    Arrays.stream(dArray);//배열로 스트림 생성
     
    Stream<Integer> str = Stream.of(1,2); // 스트림 직접 생성
    

     

    배열에서의 스트림 활용

    //String 배열
    String[] strArray = { "홍길동", "이순신", "임꺽정"};
    Stream<String> strStream = Arrays.stream(strArray);
    strStream.forEach(a -> System.out.print(a + ","));
    System.out.println();
    		
    //int 배열
    int[] intArray = { 1, 2, 3, 4, 5 };
    IntStream intStream = Arrays.stream(intArray);
    intStream.forEach(a -> System.out.print(a + ","));
    System.out.println();

     

     

    클래스에서의 스트림 활용

    class Student {
        private String name;
        private int score;
    	
        public Student(String name, int score) {
            this.name = name;
            this.score = score;
        }
    
        public String getName() { return name; }
        public int getScore() { return score; }
    }
    
    
    public class FromCollectionExample {
        public static void main(String[] args) {
            List<Student> studentList = Arrays.asList(
                new Student("홍길동", 10),
                new Student("이순신", 20),
                new Student("임꺽정", 30)
            );
    		
            Stream<Student> stream = studentList.stream();
            stream.forEach(s -> System.out.println("이름 : "+ s.getName()));
        }
    }
    반응형

    'Java' 카테고리의 다른 글

    [JAVA] BigInteger  (0) 2021.04.01
    [JAVA] X-Frame-Options deny  (0) 2021.03.12
    [JAVA] 람다식 (Lambda)  (0) 2021.02.24
    [JAVA] NIO 패키지  (0) 2021.02.24
    [JAVA] 자바7 자바8 차이  (0) 2021.02.24
    댓글