[Java] 스트림(Stream)
by coco3o스트림(Stream)이란?
스트림(Stream)은 자바 8부터 추가된 컬렉션(배열 포함)의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다.
Iterator와 비슷한 역할을 하지만 람다식으로 요소 처리 코드를 제공하여 코드가 좀 더 간결하게 할 수 있다는 점과 내부 반복자를 사용하므로 병렬처리가 쉽다는 점에서 차이가 있다.
온라인 자바 스터디 # 15 - 람다식
목표 자바의 람다식에 대해 학습하세요. 학습할 것 (필수) 람다식 사용법 함수형 인터페이스 Variable Capture 메소드, 생성자 레퍼런스 람다식이란? 메소드를 하나의 간결한 식(expression)으로 표현한
dev-coco.tistory.com
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); }
자바 7 이전까지는 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()메소드로 스트림 객체를 얻고 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())); } }
References : 이것이 자바다 16장 스트림과 병렬처리
블로그의 정보
슬기로운 개발생활
coco3o