Hi

Java, 객체(class)를 정렬할 수 있게 하려면 본문

Programming/Java

Java, 객체(class)를 정렬할 수 있게 하려면

SharingWorld 2018. 4. 3. 13:48
스택을 만들어보자
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

// User를 정렬 가능하게 만들고 싶다.
// 1. Comparable 인터페이스를 구현해야 한다.

// class User implements Comparable<User> {
class User {
	private String name;
	private int age;

	String getName() {
		return name;
	}

	int getAge() {
		return age;
	}

	User(String name, int age) {
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		// return this.name + "(" + this.age + ")";
		return String.format("%s(%d)", name, age);
	}

	static List<User> data() {
		return Arrays.asList(
			new User("허", 28),
			new User("공", 23),
			new User("심", 26),
			new User("안", 26),
			new User("홍", 24),
			new User("이", 25),
			new User("이", 22),
			new User("홍", 22),
			new User("이", 22),
			new User("구", 22),
			new User("임", 22)
			);
	}

	// 아래 처럼 사용하는 것은 불편하다.
	// 1. 반드시 클래스의 설계자가 비교 가능하도록
	// 만들어주어야 한다.
	// 2. 사용자마다 다른 정책으로 비교할 수 없다.
	// => 정책을 분리해서 외부에서 결정할 수 있도록 만들어주자.
	// @Override
	// public int compareTo(User o) {
	// 		// return o.name.compareTo(name);
	// 		return name.compareTo(o.name);
	// }
}


public class Java0319 {
	public static void main(String[] args) {
		List<User> users = User.data();

		// User를 어떤 기준으로 정렬할 것인가
		// Collections.sort(users);

		Collections.sort(users, new Comparator<User>() {
			@Override
			public int compare(User o1, User o2) {
				return Integer.compare(o1.getAge(), o2.getAge());
			}
		});

		// 선언적 프로그래밍 - Java
		// 1. 코드의 가독성이 높다.
		// 2. 실수가 적다.
		// 3. 클래스의 설계자가 비교에 대한 기능을 제공하지 않아도 된다.
		// Collections.sort(users,
		// Comparator.comparing(User::getAge));

		Collections.sort(users,
			Comparator.comparing(User::getAge));





		for (User e : users) {
			System.out.println(e);
		}

	}
}


'Programming > Java' 카테고리의 다른 글

functionalInterface  (0) 2018.04.09
Collection / Container  (0) 2018.04.04
자료구조  (0) 2018.04.02
hashCode / equals  (0) 2018.04.02
Reflection  (0) 2018.04.02