스트림

lil_bear·2020년 6월 4일
0

자바

목록 보기
2/3

누구세요?

  • 컬렉션, 배열 등의 저장 요소를 하나씩 참조하여 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리할 수 있도록 해주는 기능.
  • 그냥 쉽게 말하면 반복문을 대체 할 수 있는 기능
  • 자바 8부터 추가됐으니 참고하길.

왜 써요?

처음에는 정말 왜 사용해야 하는지 이해하지 못했다. 메서드들을 알고 있어야 코드의 이해가 가능하고, 성능 또한 for문 혹은 foreach문보다 좋지 않다. 하지만 로직이 복잡하면 for문안에 담는 것보다 훨씬 간결하게 작성할 수 있고, 유지보수가 수월하다. (그리고 쓰다보면 이어지는게 재밌다)

어떻게 생겼어요?

Obejct.스트림생성().중개연산().최종연산();
  • 최종연산을 하지 않으면 오류가 난다.

어떻게 써요?

메서드들을 정리한 자료가 있는데, 진짜 너무 많다. 자주 사용하는 것들의 예시를 들어놓겠다.

public class Ball {
	private int number;

	public Ball(int number) {
		this.number = number;
	}
	
	public void getNumber() {
		return this.number;
	}

	//...
}
public class MapSample {
	// 스트림을 이용한 메서드
	public int sumAll(List<Ball> balls) {
		return balls.stream()
        		.mapToInt(ball -> ball.getNumber())
                	.sum();
	}
	// for문을 이용한 메서드
	public int sumAllByFor(List<Ball> balls) {
		int sum = 0;
		for (int i = 0; i < balls.size(); i++) {
			sum += balls.get(i).getNumber();
		}
		return sum;
	}
	// iter을 이용한 메서드
	public int sumAllByForEach(List<Ball> balls) {
		int sum = 0;
		for (Ball ball : balls) {
			sum += ball.getNumber();
		}
		return sum;
	}
}
public class FilterSample {
	// 스트림을 이용한 메서드
	public Ball findBall(List<Ball> balls, int number) {
		return balls.stream()
        		.mapToInt(ball -> ball.getNumber())
                	.filter(ball -> ball.getNumber() == number)
                	.findFirst()
                	.orElseThrow(RuntimeException::new);
	}
	// for문을 이용한 메서드
	public Ball findBallByFor(List<Ball> balls, int number) {
		for (int i = 0; i < balls.size(); i++) {
			if (balls.get(i).getNumber() == number) {
				return balls.get(i);
			}
		}
		throw new RuntimeException();
	}
	// iter을 이용한 메서드
	public Ball findBallByForEach(List<Ball> balls, int number) {
		for (Ball ball : balls) {
			if (ball.getNumber() == number) {
				return ball;
			}
		}
		throw new RuntimeException();
	}
}
profile
하기 싫은 것은 안하는 편

0개의 댓글