Collections.sort(words, new Comparator<String>() {
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
});
Collections.sort(words,
(s1, s2) -> Integer.compare(s1.length(), s2.length()));
- 컴파일러가 타입을 추론하는 데 필요하는 타입 정보 대부분은 제네릭에서 얻기 때문에 제네릭을 사용하는 것은 중요하다.
Collections.sort(words, comparingInt(String::length));
words.sort(comparingInt(String::length));
public enum Operation {
PLUS("+") {
public double apply(double x, double y) { return x + y; }
},
MINUS("-") {
public double apply(double x, double y) { return x - y; }
},
TIMES("*") {
public double apply(double x, double y) { return x * y; }
},
DIVIDE("/") {
public double apply(double x, double y) { return x / y; }
};
private final String symbol;
Operation(String symbol) { this.symbol = symbol; }
public abstract double apply(double x, double y); //추상메소드
}
public enum Operation {
PLUS ("+", (x, y) -> x + y),
MINUS ("-", (x, y) -> x - y),
TIMES ("*", (x, y) -> x * y),
DIVIDE("/", (x, y) -> x / y);
private final String symbol;
private final DoubleBinaryOperator op;
Operation(String symbol, DoubleBinaryOperator op) {
this.symbol = symbol;
this.op = op;
}
@Override public String toString() { return symbol; }
public double apply(double x, double y) {
return op.applyAsDouble(x, y);
}
}
- DoubleBinaryOperator : java.util.function 이 제공하는 다양한 함수 인터페이스로, double 타입 인수 2개를 받아 double 타입 결과를 돌려준다.
- 인스턴스는 런타임에 만들어지기 때문이다.
- 람다의 this는 바깥 인스턴스를 가리키고, 익명 클래스의 this는 익명 클래스 인스턴스 자신을 가리킨다.
- Serializable 인터페이스 구현하여 클래스 작성하기
Reference: