Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Super Coding Addict

Ch12. 스트림 (1) 본문

JAVA 문법

Ch12. 스트림 (1)

밍응애 2021. 2. 6. 12:46

* 스트림

- 자료의 대상과 상관없이 동일한 연산 수행할 수 있는 기능 --> 자료의 추상화

- 배열, 컬렉션(ArrayList)에 동일한 연산이 수행되어 일관성있는 처리 가능

- 한번 생성하고 사용한 스트림 재사용 불가 --> 스트림 객체 새로 만들어야 함!

( 스트림은 원본 배열을 건드리는 게 아니라, another 메모리에서 하나씩 꺼내서 소모하는 연산이 이루어지므로 )

- 중간연산과 최종연산으로 구분되며, 최종연산이 수행되어야 모든 연산이 적용되므로 중간연산 결과를 도중 확인불가

 

* 스트림 연산 - 중간 연산

- filter() : 조건에 맞는 요소를 추출

ex) 문자열 길이가 5이상인 요소만 출력하기

sList.stream().filter(s-> s.length() >= 5).forEach(s -> System.out.println(s));

- map() : 요소를 변환

ex) 고객 클래스에서 고객 이름만 가져오기

customerList.stream().map(c -> c.getName()).forEach(s-> System.out.println(s));

 

* 예제

# IntArrayTest 클래스

package ch12.stream;

import java.util.Arrays;

public class IntArrayTest {
	public static void main(String[] args) {
		
		int[] arr = {1,2,3,4,5};
		
		int sum = Arrays.stream(arr).sum();
		int count = (int)Arrays.stream(arr).count();
		
		System.out.println(sum);
		System.out.println(count);
		
		System.out.println(Arrays.stream(arr).reduce(0, (a,b)->a+b));
	}
}

--> 숫자 1,2,3,4,5를 담은 int형 배열 arr선언

--> 배열의 경우 Arrays클래스의 stream메서드를 활용하여 스트림을 생성한다

--> 스트림 생성후 각각 sum()과 count()메서드로 최종연산을 하면 결과값은 15와 5가 된다

 

 

# ArrayListStreamTest 클래스

package ch12.stream;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;


public class ArrayListStreamTest {

	public static void main(String[] args) {
		List<String> sList = new ArrayList<String>();
		sList.add("Tomas");
		sList.add("Edward");
		sList.add("Jack");
		
		Stream<String> stream= sList.stream();
		stream.forEach(s->System.out.print(s + " "));
		System.out.println();	//결과값 : Tomas Edward Jack
		
		sList.stream().sorted().forEach(s->System.out.print(s + " "));
		//sorting은 comparable이 구현이 되어있어야 한다 (String은 comparable하다)
        // 결과값 : Edward Jack Tomas
		System.out.println();
		sList.stream().map(s->s.length()).forEach(n->System.out.println(n));
		// 결과값 : 5
				6
				4
	}

}

--> 컬렉션을 String타입의 ArrayList로 생성한 뒤, 이름 3개를 add

--> 컬렉션의 경우 stream()메서드를 직접 쓸 수 있으므로 sList.stream()과 같이 스트림을 생성할 수 있으며, 반환형은 Stream형이다.

'JAVA 문법' 카테고리의 다른 글

Ch13. 예외 처리  (0) 2021.02.09
Ch12. 스트림 (2)  (0) 2021.02.06
Ch12. 람다식 (2)  (0) 2021.02.06
Ch12. 람다식 (1)  (0) 2021.02.06
Ch07. 상속과 다형성 (1)  (0) 2021.01.22