twocowsong

자바 람다식 - anyMatch 본문

IT/JAVA

자바 람다식 - anyMatch

WsCode 2022. 4. 5. 10:24

한줄이라도 줄이고싶다면 당신은 개발자입니다!

 

public class Dish {
	private String name;
	private boolean sale;
	private int price;
	private Type type;

	public enum Type{MEAT, FISH, OTHER}
}

Dish클래스입니다. 음식의 이름, 판매여부, 가격, 타입을 가지고있습니다.

 

 

List<Dish> menu = Arrays.asList(
        new Dish("salmon", true, 430, Dish.Type.FISH),
        new Dish("rice", true, 500, Dish.Type.OTHER),
        new Dish("french", true, 600, Dish.Type.MEAT),
        new Dish("pork", true, 800, Dish.Type.MEAT),
        new Dish("pizza", true, 900, Dish.Type.OTHER),
        new Dish("beef", true, 1800, Dish.Type.MEAT)
);

위와같이 데이터를 생성시켰습니다.

 

만약 Dish의 가격이 800원이 넘는 목록이 한개라도있을경우 true값을 리턴해야한다면 어떻게 소스코드를 만드시겠어요?

boolean isOverPrice800 = false;
for (Dish dish : menu) {
    if (dish.getPrice() >= 800) {
        isOverPrice800 = true;
        break;;
    }
}

if (isOverPrice800) {
    // 실행될 내용
}

리스트를 순회하면서 800원이 넘는가격을 매번 비교한 후 이상인 값이 있을때 break를 실행하여 리턴되도록 할것같습니다.

 

이때 람다식을 만나게된다면 소스코드는 정말 많이 줄어들게됩니다.

if (menu.stream().anyMatch(dish -> dish.getPrice() >= 800)) {
    // 실행될 내용
}

menu 리스트에서 stream을 사용하여 한줄로 표현이 가능합니다.

anyMatch는 800원이 넘는가격을 만나게된다면 break를 실행하여 더이상 실행되지않음으로 위에 2개의 소스코드는 같습니다. (이를 쇼트서킷 평가라고 합니다.)

'IT > JAVA' 카테고리의 다른 글

스레드(Thread)와 Runnable  (0) 2022.05.23