코딩하렴

JAVA 객체에 있는 변수를 기준으로 정렬하기

by 으렴

객체에 있는 변수를 기준으로 정렬하는 방법을 설명하려고 한다.

 

여기서 가장 중요한 것은 Collections객체에 들어있는 Comparator인터페이스이다.

 

Comparator는 약간의 규칙만 정해주면 얼마든지 활용하기 좋다.

 

linkedlist에 객체를 담아보쟈

 

객체를 만들쟈

class Card {
	int n;
	String s;
	public Card(int n, String s) {
		this.n = n;
		this.s = s;
	}
	public int getN() {
		return n;
	}
	public void setN(int n) {
		this.n = n;
	}
	public String getS() {
		return s;
	}
	public void setS(String s) {
		this.s = s;
	}
	public void outPut() {
		System.out.println("> " + this.n + "/" + this.s);
	}
}

String  s는 걍 장식이다.

 

		LinkedList<Card> list = new LinkedList<Card>(); // 숫자를 기준으로 정렬할거당

		for (int i = 0; i < 5; i++) {
			int temp = (int) (Math.random() * 100) + 1;
			list.add(new Card(temp, i + "data"));
		}

		for (Card item : list) {
			item.outPut();
		}

이렇게 만들고 무작위 integer type의 값을 객체에 담아봅시다

 

출력이 무작위로 되었을 것이다.

 

첫 번째이다.

 

		Collections.sort(list,new Comparator<Card>() {	// 기본1
			@Override
			public int compare(Card c1, Card c2) {
				if(c1.n>c2.n) {
					 return +1;		//양수
				}else {
					return -1;		//음수
				}
			}
		});
		System.out.println("---------------");
		for (Card item : list) {
			item.outPut();
		}

Comparator는 퀵정렬(정렬 중 제일 빠름)을 구현하고 있으며 가장 최적화 되어있는 정렬로 알고있다.

 

이 Comparator는 정렬프로그램이 아니다. 약간의 규칙만 정해주면 자기가 알아서 정렬을 해준다.

 

두 변수를 받아 그안의 비교값을 찾아 음수와 양수를 갖다주면 끝이다.

 

		Collections.sort(list, new Comparator<Card>() { //기본2
			@Override
			public int compare(Card c1, Card c2) {
				return (c1.n > c2.n) ? +1 : -1;
			}
		});

위의 코드를 줄여보았다.

		Collections.sort(list, new Comparator<Card>() {
			@Override
			public int compare(Card c1, Card c2) {
				return c1.n - c2.n;
				// return c2.n - c1.n; //역순 정렬
			}
		});

더 줄여보아따

		Collections.sort(list, (c1, c2) -> {
			return c2.n - c1.n;
		});

람다식이다.

	Collections.sort(list, (c1, c2) -> c1.n - c2.n );	

람다식 한번 더써따

 

람다식을 사용하면 위처럼 코드가 간결해진다.

무조건 위와 같은 람다식을 사용해야하느냐? 라고한다면 아니다.

 

만약 인수가 integer가 아닌 float이라면 5개의 코드 예제중 아래 3개는 사용할 수가 없다.

주석 달아 놓은 기본1과 기본2만 사용해야한다.

 

 

사이트의 정보

코딩하렴

으렴

활동하기