상세 컨텐츠

본문 제목

java Stream 자바 스트림 공부 정리 part02

Language/JAVA

by Computer_x86_64 2021. 8. 25. 11:09

본문

 

JAVA Stream 스트림 part02

Java Stream 자바 스트림 공부 정리 part02

 

Part01은 아래로 가시면 보실수 있습니다. 

 

 

Java Stream 자바 스트림 공부 정리

java Stream 자바 스트림 공부 정리 요약 : 스트림은 데이터를 추상화하고 모든 데이터를 공통적으로 컨트롤 할수 있게 하는 것입니다. 느낌이 오시나요? 물론 해보지 않고 뭔 멍소리야 하실수 있습

hwang890.tistory.com

 

앞에 스트림에서 여러 데이터 구조를 다루는 갇단히 다루게 하는 스트림을 맛보기 했습니다. 

 

그럼 살짝 성질을 알아볼까요?

1. 앞에말씀드린 재사용 불가

2. 파이프 필터 패턴이다.
    stmStrArr.filter((s)-> s == "c") .forEach(System.out::print)

    스트리밍 이라는 소리들어보셨죠? 스트림은 이것입니다. 데이터의 흐름!
    데이터의 흐름을 파이프에 태워 필터링하고 그결과를 산출하는 방식을 파이프 패턴이라고 합니다. 

3. 지연 연산 
    strmStrArr.filter((s)-> s =="c");

    이럴경우 중간연산자만 사용하고 있기 때문에 해당 코드를 아에 실행도 하지 않습니다.
     최종연산자가 있어야만 연산을 시작합니다.

     (지연연산은 미리 값을 계산하지 않아 메모리를 절약하고 필요할때만 연산해 프로그램 성능에 좋습니다.)

4. 스트림작업은 내부 반복으로 처리됩니다.

   

자 그럼 Stream을 다시 사용해봐요 

 

class human {
	private String name;
	private int age;
	
	public human() {
		//default Constructor
	}
	
	public human(String name, int age) {
		this.name = name;
		this.age=age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "human [name=" + name + ", age=" + age + "]";
	}
	
	
}

public class StreamTest {
	
	public static void main(String[] args) {
		human h0 = new human("홍길동", 80);
		human h1 = new human("고길동", 12);
		human h2 = new human("허준", 31);
		
		List<human> listH = new ArrayList<human>();
		listH.add(h0);
		listH.add(h1);
		listH.add(h2);
		
//		Stream<human> h4 = listH.stream().filter((h)->h.getAge() >90).findFirst();
		//나이가 50보다 큰 사람을 필터링하고 그중 첫번쨰 만 검출하는 코드입니다.
		Optional<human> h3 = listH.stream().filter((h)-> h.getAge() > 50).findFirst();
		
       	 System.out.println(h3);

		h3 = null;
		System.out.println(h3);
		
	}
}

 위에 human code는 name, age를 구성한 간단한 클래스입니다. 그리고 기본 getter, setter, toString()이 정의했습니다.

 보시며 human 클래스로 객체를 생성하고 list로 담아 스트림으로 변환하는데... 

Optional<human> h3?

Stream은 어디가고?

해당 조건은 나이가 50보다 큰 사람을 필터링하고 그중 첫번쨰 만 검출하는 코드입니다.

 

그럼 Optional은 왜 갑자기 나왔을까요 ?

위에 Stream은 왜 주석일까요?

 

Stream객체의 null일경우... 오류가 발생합니다.

그럼 해당 조건에 부합하는 human객체가 없었다면 오류가 발생합니다.

그런 null값을 제어하기 위해 Optional이라는 게 있습니다.

 

Stream은 null을 사용시 사용시 항상 if문을 ㅏ용하지만 Optional은 

null은 그냥 null로 출력합니다.

 

중간연산자, 최종연산자는 구글링하면 잘나와있어 정리 하지 않겟습니다.

최종연산자인 collect()를 정리하겠습니다.

관련글 더보기

댓글 영역