핵심
객체가 정렬될때, 사용자의 의도에 따라 정렬 구조를 변경할 수 있도록 지원되는 인터페이스기본 코드
public static void main(String[] args) {
List<Player> footballTeam = new ArrayList<>();
Player player1 = new Player(59, "John", 20);
Player player2 = new Player(67, "Roger", 22);
Player player3 = new Player(45, "Steven", 24);
footballTeam.add(player1);
footballTeam.add(player2);
footballTeam.add(player3);
System.out.println("Before Sorting : " + footballTeam);
Collections.sort(footballTeam);
System.out.println("After Sorting : " + footballTeam);
}
public class Player {
private int ranking;
private String name;
private int age;
Player(int ranking, String name, int age){
// constructor
}
// getters, setters
}
Comparable
정의
구현되는 클래스의 기본 정렬기준을 별도로 구현정렬 기준을 변경하기 위해 정렬대상에게 Comparable 인터페이스의 compareTo(Object obj) 를 구현한다. 해당 메서드에서 비교 대상의 개체가 인수로 전달되는 개체보다 작거나 같은지 또는 큰지 여부를 나타내는 숫자로 반환한다.
코드
public class Player implements Comparable<Player> {
@Override
public int compareTo(Player otherPlayer) {
// ranking 값이 작은 순으로 정렬
return (this.getRanking() - otherPlayer.getRanking());
}
}
Before Sorting : [John, Roger, Steven]
After Sorting : [Steven, John, Roger]
Comparator
정의
기존에 Comparable의 compareTo로 구현된 것이 아닌 별도의 정렬기준을 적용할때코드
익명 클래스로 선언하여 사용편리Collections.sort(playerList, new Comparator<Player>(){
@Override
public int compare(Player firstPlayer,Player secondPlayer){
return (firstPlayer.getRanking() - secondPlayer.getRanking());
}
});
Lambda 사용시Collections.sort(playerList,(firstPlayer, secondPlayer) -> firstPlayer.getRanking() - secondPlayer.getRanking());
0 개의 댓글:
댓글 쓰기