함수형 인터페이스, ==와 equals()

최지혜·2022년 11월 23일
0

java

목록 보기
28/33

함수형 인터페이스

람다식을 사용하기 위한 API
인터페이스에 구현할 메소드가 하나 뿐인 인터페이스
enum과 함께 사용하면 좋음!

public enum Operator {
    PLUS("+", (a, b) -> a + b),
    MINUS("-", (a, b) -> a - b),
    MULTIPLY("*", (a, b) -> a * b),
    DIVIDE("/", (a, b) -> a / b);

    private final String sign;
    private final BiFunction<Long, Long, Long> bi;

    Operator(String sign, BiFunction<Long, Long, Long> bi) {
        this.sign = sign;
        this.bi = bi;
    }

	  public static long calculate(long a, long b, String sign) {
    	  Operator operator = **Arrays.stream(values())**
            	.filter(v -> v.sign.equals(sign))
            	.findFirst()
            	.orElseThrow(IllegalArgumentException::new);

    	  return operator.bi.apply(a, b);
	  }
}
public static void main(String[] args) {
    String question = "4*7";
    String[] values = question.split("");

    long a = Long.parseLong(values[0]);
    long b = Long.parseLong(values[2]);

    long result = Operator.calculate(a, b, values[1]);
    System.out.println(result); //28
}

==와 equals()

new 연산자로 생성한 문자열과 리터럴로 생성한 문자열은 내부의 값은 같아서
equals()는 true를 반환하지만 실제 주소를 비교하는 ==는 false를 반환
(동등 비교 연산자인 ==는 실제 객체가 가지고 있는 주솟값을 비교하는 연산자이기 때문)

profile
매일 성장하는 개발자

0개의 댓글