티스토리 뷰

반응형

 Stream (스트림) 

스트림은 자바8부터 추가된 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. 데이터 컬렉션 반복을 멋지게 처리하는 기능이라고 생각하면 이해가 쉽다.
Iterator와 비슷한 역할을 하지만 람다식으로 처리하기 때문에 코드를 좀 더 간결하게 할 수 있으며, 내부 반복자를 사용하므로 병렬처리가 쉽다는 점에서 차이가 있다.  

 

 

Iterator를 이용해 ArrayList의 요소를 모두 처리하기 위한 방법은 다음과 같다.

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

 

 

Stream의 반복 순회

ArrayList<Integer> arrayList = new ArrayList<Integer>(Arrays.asList(1,2,3));
Stream<Integer> str = arrayList.stream();
str.forEach(num -> System.out.println(num));

stream() 메소드로 Stream 객체를 만들어 저장한 후, forEach 메소드로 ArrayList의 요소를 모두 처리합니다.

이 때, 람다식을 이용합니다.

 

 

 

 

 

 스트림 예제 

1) String 배열

sorted() 라는 정렬 메소드를 사용하여 정렬 후 forEach() 메소드를 통해 각 요소를 출력

String[] sArray = { "박새롬", "김영미", "김철수"};
Stream<String> sStream = Arrays.stream(sArray);
sStreams.sorted().forEach(str -> System.out.println(str));

 

2) int 배열

sum() 메소드를 이용해 배열 요소들의 합을 구하여 출력

int[] iArray = { 1, 2, 3, 4, 5 };
IntStream iStream = Arrays.stream(iArray);
int sumValue = iStream.sum();
System.out.println(sumValue);

 

 

3) Class (클래스)

class Animal {
    private String name;
    private int age;
	
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public int getAge() { return age; }
}


public class StreamExample {
    public static void main(String[] args) {
        List<Animal> animaList = Arrays.asList(
            new Animal("Horse", 10),
            new Animal("Dog", 20),
            new Animal("Tiger", 10)
        );
		
        Stream<Animal> stream = animaList.stream();
        stream.forEach(a -> System.out.println("이름 : "+ a.getName()));
    }
}

 

 

 

4) reduce() 함수 사용

reduce() 는 프로그래머가 직접 지정하는 연산을 적용한다.

함수의 첫번째 요소로 전달하는 것은 초깃값, 두번째 요소는 기능을 수행할 람다식이다.

아래 코드는 reduce() 를 이용하여 int 배열의 요소들의 모든 합을 출력하는 내용이다.

public class ReduceTest {
    public static void main(String[] args){
        int[] arr = {1, 2, 3, 4, 5};

        System.out.println(Arrays.stream(arr).reduce(0, (a,b)-> a + b));
    }
}

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday