2014-02-12 2 views
1

10 개 항목의 배열 목록이 있습니다. 이 항목을 매개 변수로 정렬하고 싶지만 어떻게 작성해야할지 모르겠습니다.배열 목록을 매개 변수로 정렬하는 방법은 무엇입니까?

배열 목록에서 내 항목에 대한

서명은 다음과 같습니다

Creature(String n, Terrain startTerrain, boolean flying, boolean magic, boolean charge, boolean ranged, int combat) 

그래서 기본적으로 나는 그것이 마법에 해당하는 생물 그래서 내 배열 목록이 정렬 갖고 싶어, 그들은 원거리 생물 먼저, 첫 번째입니다 , 그들은 목록에서 다음에 나타납니다.

저는 거품 형으로 만 작업했으며, 이것을 구현하는 방법을 모르겠습니다. 어떤 힌트?

+3

사용자 지정 비교기가있는'Collections.sort'. –

+0

[Comparable] (http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html)도 구현할 수 있습니다. –

답변

2

가장 쉬운 방법은 Comparator<Creature>, 즉 CreatureComparator을 구현하는 자신 만의 클래스를 만드는 것입니다. 그것의 compare method는 당신이 원하는 Creature의 순서를 정의 할 것입니다.

주문에 대해 두 개의 인수를 비교합니다. 첫 번째 인수가 두 번째 인수보다 작거나 같거나 큰 경우 음수, 0 또는 양의 정수를 반환합니다.

그런 다음 Collections.sort(yourArrayList, new CreatureComparator());으로 전화 할 수 있습니다.

여러 속성을 한 번에 정렬하려면 먼저 첫 번째 정렬 기준을 테스트하십시오. 나는. 왼쪽 측면의 magictrue이고 오른쪽면의 magicfalse 인 경우 -1을 반환하면 모든 마법 생물이 마법 물품이 아닌 모든 생물 앞에 표시됩니다. 그 반대이면 1을 반환하십시오. magic 필드가 동일한 경우에만 2 차 및 3 차 (및 기타) 정렬 기준을 비교하기 시작합니다. 따라서 magic 필드가 동일하면 ranged 등을 테스트하십시오. 모든 정렬 기준이 동일 할 경우에만 0 (이에 상응하는 금액)을 반환하십시오.

+0

두 가지를 비교하는 방법을 볼 수는 있지만 어떻게 세 가지로 정렬 할 수 있습니까? – Sarah

+0

업데이트 된 답변을 참조하십시오. 나는 당신이 동시에 여러 기준으로 어떻게 분류 할 수 있었는지 설명했다. – rgettman

관련 문제