public static void main(String[] args) {
List<BaseballPlayer> list = new ArrayList<>();
list.sort(new Comparator<BaseballPlayer>() {
@Override
public int compare(BaseballPlayer o1, BaseballPlayer o2) {
return o1.getPlayerName().compareTo(o2.getPlayerName());
}
});
public static void main(String[] args) {
List<BaseballPlayer> list = new ArrayList<>();
list.sort( (BaseballPlayer o1, BaseballPlayer o2) -> o1.getPlayerName().compareTo(o2.getPlayerName()));
};
public static void main(String[] args) {
List<BaseballPlayer> list = new ArrayList<>();
list.sort(Comparable::compareTo);
});
public class SortCollection {
public static void main(String[] args) {
List<BaseballPlayer> list = new ArrayList<>();
BaseballPlayer o1 = new BaseballPlayer("C");
BaseballPlayer o2 = new BaseballPlayer("B");
BaseballPlayer o3 = new BaseballPlayer("A");
list.add(o1);
list.add(o2);
list.add(o3);
list.sort(Comparable::compareTo);
for(BaseballPlayer baseballPlayer : list){
System.out.println(baseballPlayer);
}
}
}i
result
BaseballPlayer{playerName='A'}
BaseballPlayer{playerName='B'}
BaseballPlayer{playerName='C'}
람다 표현식을 사용함으로써 얻을 수 있는 장점
이름 없는 함수를 선언할 수 있다. 메서드는 반드시 특정 클래스나 인터페이스 안에 포함되어야 하고 메서드의 이름이 있어야 하지만, 람다 표현식은 이러한 제약에서 벗어날 수 있다. 프로그래밍 시 제약 조건이 완화되어서 유연성이 생긴다.
소스 코드의 분량을 획기적으로 줄일 수 있다. 반복적으로 작업해야 하는 기존의 비효율적인 코드 작성 방식이 필요없다.
코드를 파라미터로 전달할 수 있다. 외부에서 동작을 정의해서 메서드에 전달할 때 편리하게 사용할 수 있다.
익명 클래스를 단순화하여 그 표현식을 메서드의 인수로 전달하거나 인터페이스의 객체를 생성할 수 있는 기능을 제공한다.
(String name) -> System.out.println(name)
(String value) -> "somevalue.equals(value)
() -> new SomeClass()
(String a) -> a.substring(0,10)
(int min, int max) -> (min + max) / 2
public static Runnable getRunnable(){
return () -> System.out.println("hello world");
}
public static void main(String[] args) {
Thread thread1 = new Thread( () -> System.out.println("hello world"));
Runnable run = () -> System.out.println("hello world");
Thread thread2 = new Thread(run);
Runnable run2 = getRunnable();
Thread thread3 = new Thread(run2);
}
파라미터로 전달될 데이터의 타입 부분도 제거할 수 있다.
인터페이스에 정의되어 있는 메서드의 파라미터 타입은 사전에 정의하거나 제네릭을 이용해서 타입을 선언한다.
예를들어 다음 두개의 코드는 동일한 람다 표현식이다.
(String a) -> System.out.println("a");
(a) -> System.out.println("a");