[Java] 자바 스트림(Stream) 사용법 & 예제

    스트림(Stream)이란?

    스트림은 자바8부터 추가된 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자입니다. Iterator와 비슷한 역할을 하지만 람다식으로 요소 처리 코드를 제공하여 코드가 좀 더 간결하게 할 수 있다는 점과 내부 반복자를 사용하므로 병렬처리가 쉽다는 점에서 차이점이 있습니다. 

    [Java] 람다식(Lambda Expressions) -> 사용법 & 예제

     

    Iterator과 Stream의 코드 비교

    ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
    Iterator<Integer> iter = list.iterator();
    while(iter.hasNext()) {
        int num = iter.next();
        System.out.println("값 : "+num);
    }
    

    자바 6이전까지는 ArrayList에서 요소를 순차적으로 처리하기 위해 Iterator라는 반복자를 위와 같이 사용하였습니다.

     

    ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
    Stream<Integer> stream = list.stream();
    stream.forEach(num -> System.out.println("값 : "+num));
    

    하지만 위와 같이 자바8부터 추가된 스트림을 사용하면 훨씬 단순하게 코딩할 수 있습니다. 자바 8이후에 작성된 코드에서는 람다식으로 기술 된 부분에는 꼭 Stream이 들어가는 부분이 많습니다. 위에서는 stream()메소드로 스트림 객체를 얻은 후 foreach(num->System.out.println(num));에서 ArrayList에있는 요소들을 하나씩 출력합니다. stream.forEach()메소드는 Consumer 함수적 인터페이스 타입의 매개값을 가지므로 컬렉션의 요소를 소비할 코드를 람다식으로 만들 수 있습니다.

     

     스트림(Stream) 사용법 

    배열에서의 스트림 활용

    //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()));
        }
    }
    
    

    참고자료

    댓글(2)

    • 2020.07.02 13:15 신고

      오늘도 포스팅 잘 보고갑니다.
      앞으로도 좋은 포스팅 부탁드리며,
      즐거운 하루 보내세요ㅎㅎㅎ

    • 2020.07.19 03:36

      비밀댓글입니다

    Designed by JB FACTORY