Java/패스트캠퍼스

스트림 & 예제

hs_developer 2022. 6. 14. 19:51

스트림이란?

 

연산의 처리를 일관성 있게 만든다. 추상화 한다.

 

-자료의 대상과 관계없이 동일한 연산을 수행 함

배열, 컬렉션을 대상으로 연산을 수행 함

일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 함

자료 처리에 대한 추상화가 구현되었다고 함

 

-한 번 생성하고 사용한 스트림은 재사용 할 수 없음

자료에 대한 스트림을 생성하여 연산을 수행하면 스트림은 소모 됨

다른 연산을 수행하기 위해서는 스트림을 다시 생성해야 함

 

-스트림 연산은 기존 자료를 변경 하지 않음

자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간은 별도로 생성되므로 연산이 수행 되어도 기존 자료에 대한 변경은 발생하지 않음

 

-스트림 연산은 중간 연산과 최종 연산으로 구분 됨

스트림에 대해 중간 연산은 여러 개의 연산이 적용될 수 있지만 최종 연산은 마지막에 한 번만 적용 됨

최종 연산이 호출되어야 중간 연산에 대한 수행이 이루어지고 그 결과가 만들어짐

따라서 중간 연산에 대한 결과를 연산 중에 알 수 없음

이를 '지연 연산'이라 함

 

 

스트림 생성하고 사용하기

-정수 배열에 스트림 생성, 연산

 

import java.util.Arrays;

public class IntArrayTest {

	public static void main(String[] args) {
		
		int[] arr = {1, 2, 3, 4, 5};
		
		int sumVal = Arrays.stream(arr).sum();
		long count = Arrays.stream(arr).count();
		
		System.out.println(sumVal); // 15
		System.out.println(count); // 5
	}
}

 

 

 

스트림을 활용하여 패키지 여행 비용 계산하기 

여행사에 패키지 여행 상품이 있다. 여행 비용은 15세 이상은 100만원, 그 미만은 50만원이다. 

고객 3명이 패키지 여행을 떠난다고 했을 때 비용 계산과 고객 명단 검색 등에 대한 연산을 스트림을 활용해 구현한다.

고객에 대한 클래스를 만들고 ArrayList로 고객을 관리한다.

Lee
이름: 이순신
나이: 40
비용: 100

Kim
이름: 김유신
나이: 20
비용: 100

Hong
이름: 홍길동
나이: 15
비용: 50

 

1. 고객의 명단을 출력한다.

2. 여행의 총 비용을 계산한다.

3. 고객 중 20세 이상인 사람의 이름을 정렬 해 출력한다.

 

@Getter
@Setter
public class Customer {

	private String name;
	private int age;
	private int price;
	
	public Customer(String name, int age, int price)
	{
		this.name = name;
		this.age = age;
		this.price = price;
	}

	@Override
	public String toString() {
		
		return "이름: " + name + "나이: " + age + "가격: " + price;
	}
}

 

 

 

'Java > 패스트캠퍼스' 카테고리의 다른 글

표준 입출력 스트림  (0) 2022.06.14
I/O 스트림  (0) 2022.06.14
제네릭  (0) 2022.06.12
Map 인터페이스 구현 클래스  (0) 2022.06.12
Set 인터페이스 구현 클래스  (0) 2022.06.12