-
stream은 java8에 새로 추가된 기능으로 배열 요소를 특정 기준에 맞춰 정렬하거나, 특정 값에 따라 필터링해주는 기능을 간결하게 구현할 수 있도록 해주는 클래스입니다. 간단한 예제들을 통해 stream에 대해 알아가보도록 하겠습니다.
[예제 1]
public class Test { public Test(int id, String value){ this.id = id; this.value = value; } int id; String value; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
public class Main { public static void main(String[] args) { List<Test> list = Arrays.asList(new Test(2,"two"), new Test(3, "three"), new Test(1,"one") ,new Test(6,"six"), new Test(4,"four"), new Test(5,"five")); list.stream().sorted(Comparator.comparing(Test::getId)).forEach(n -> System.out.println(n.getId() + " : " + n.getValue())); } } // 결과 1 : one 2 : two 3 : three 4 : four 5 : five 6 : six
위 예제는 stream을 통해 list의 값을 Test 클래스의 id값을 기준으로 오름차순으로 정렬해주는 과정을 구현한 것 입니다. stream에서는 미리 구현되어 있는 forEach() 메서드를 사용하여 배열의 요소를 하나씩 꺼내어 출력할 수 있습니다.
스트림 연산의 종류는 중간 연산과 최종 연산으로 나뉩니다. 중간 연산은 자료를 필터링하거나 변경해주는 기능을 하고, 최종 연산은 자료를 소모하며 연산을 합니다. 위의 예제 같은 경우에는 sorted()메서드가 중간연산이고 forEach()메서드가 최종 연산입니다.
[예제 2]
public class Main { public static void main(String[] args) { List<Test> list = Arrays.asList(new Test(2,"two"), new Test(3, "three"), new Test(1,"one") ,new Test(6,"six"), new Test(4,"four"), new Test(5,"five")); list.stream().filter(n -> n.getId() > 3).sorted(Comparator.comparing(Test::getValue)).forEach(v -> System.out.println(v.getId() + " : " + v.getValue())); } } // 결과 5 : five 4 : four 6 : six
위 예제는 stream을 이용하여 list의 값중 id 값이 3보다 크고 이에 해당하는 값들의 value를 알파벳 순으로 정렬한 값을 출력하는 과정을 구현한 것 입니다.
이렇게 스트림을 사용하시다 보면 스트림이 쿼리문과 유사하다는 느낌을 받으실 수 있습니다. 이처럼 스트림을 잘 이용한다면 원하는 데이터를 간결하고 편하게 추출하고 적용하는 등 많은 것을 할 수 있습니다. 하지만 스트림은 재사용이 불가능하고 한번 에러가 발생하면 어느 부분이 잘못되었는지 확인하기 어려움으로 신중히 잘 사용해야 할 것 같습니다.
'java' 카테고리의 다른 글
[JAVA] Stream API란? (0) 2024.08.08 클래스, 객체, 인스턴스 차이 JAVA (0) 2023.03.01 자바 Static과Heap (0) 2023.01.15