JAVA/Java 기초

정렬. java

john_ 2023. 1. 30. 09:54
728x90

정렬

요소를 오름차순 or 내림차순으로 정렬하는 중간 처리기능입니다.

 

 


Comparable과 Comparator는 둘다 인터페이스 정렬에 사용합니다.
객체를 비교할수 있습니다.
(Comparable = 유사한)
Comparable : compareTo 메서드 구현
자기자신과 매개변수 객체를 비교합니다

compareTo(T o)
---------------------------------------------------------------------------
(comparator : 비교하기)
Comparator : compare 메서드 구현
두 매개변수 객체를 비교합니다

compare(T o1, T o2)

 


 

Comparable 구현 객체의 정렬

스트림의 요소가 객체일 경우 객체가 Comparable을 구현하고 있어야만 sorted() 메소드를 사용하여 정렬이 가능 합니다. 그렇지 않다면 ClassCastException이 발생합니다.

 

 


Student.java

public class Student implements Comparable<Student>{
	private String name;
	private int score;
	
	public Student(String name, int score) {
		this.name = name;
		this.score = score;
	}
	
	public String getName() {return name;}
	public int getScore() {return score;}
	
	@Override
	public int CompareTo(Student o) {
		return Integer.compare(score, o.score);
		//score와 o.score가 같을경우 0을 리턴,
		//작을겨우 음수리턴, 클 경우 양수리턴
	}
}

 

SortingExam.java

import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;

public class SortingExam {

	public static void main(String[] args) {

		//List 컬렉션 생성
		List<Student> studentList = new ArrayList<>();
		studentList.add(new Student("홍길동", 30));
		studentList.add(new Student("신용권", 10));
		studentList.add(new Student("유미선", 20));
		
		studentList.stream()
				.sorted()
				.forEach(s -> System.out.println(s.getName() + ": " + s.getScore()));
		System.out.println();
		
		//점수를 기준으로 내림차순으로 정렬한 새 스트림 얻기
		studentList.stream().sorted(Comparator.reverseOrder())
		.forEach(s -> System.out.println(s.getName() + ": " + s.getScore()));
	}
}
결과:
신용권: 10
유미선: 20
홍길동: 30

홍길동: 30
유미선: 20
신용권: 10

 


Comparator를 이용한 정렬

  • 요소 객체가 Comparable을 구현하고 있지 않다면, 비교자를 제공하면 요소를 정렬시킬수 있습니다.
sorted((o1, o2) -> {...})
  • 괄호안에는 o1이 o2보다 작으면 음수, 같으면 0, 크면 양수를 리턴하도록 작성합니다.
  • o1과 o2가 정수일 경우에는 Integer.compare(o1, o2)를, 실수일 경우에는 Double.compare(o1, o2)를 호출해서 리턴값을 리턴할수 있습니다.

 


Student.java

public class Student{
	private String name;
	private int score;
	
	public Student(String name, int score) {
		this.name = name;
		this.score = score;
	}
	
	public String getName() {return name;}
	public int getScore() {return score;}
}
SortingExam.java

import java.util.List;
import java.util.ArrayList;

public class SortingExam {

	public static void main(String[] args) {

		//List 컬렉션 생성
		List<Student> studentList = new ArrayList<>();
		studentList.add(new Student("홍길동", 30));
		studentList.add(new Student("신용권", 10));
		studentList.add(new Student("유미선", 20));
		
		//점수를 기준으로 오름차순 정렬한 새 스트림 얻기
		studentList.stream()
			.sorted((s1, s2) -> Integer.compare(s1.getScore(), s2.getScore()))
			.forEach(s-> System.out.println(s.getName() + ": " + s.getScore()));
		System.out.println();

		//점수를 기준으로 내림차순 정렬한 새 스트림 얻기
		studentList.stream()
			.sorted((s1, s2) -> Integer.compare(s2.getScore(), s1.getScore()))
			.forEach(s-> System.out.println(s.getName() + ": " + s.getScore()));
		System.out.println();
	}
}
결과:
신용권: 10
유미선: 20
홍길동: 30

홍길동: 30
유미선: 20
신용권: 10

 

728x90

'JAVA > Java 기초' 카테고리의 다른 글

Optional 클래스.java  (0) 2023.01.30
루핑, 매칭, 집계.java  (0) 2023.01.30
람다식.java  (0) 2023.01.27
컬렉션 자료구조3.java  (0) 2023.01.26
컬렉션자료구조2.java  (0) 2023.01.26