0

Java 6 で列挙型を比較す​​る最良の方法を見つけようとしています。

たとえば、Traveler に関連付けることができるチケット タイプの ENUM があるとします。旅行者のリストがあれば、最高クラスの旅行者を知りたいです。

旅行者のリストを反復処理し、一意の TicketTypes のセットを作成し、リストに変換し、それらを並べ替え、最後の要素を最高として返すことができます。これを行うためのより良い方法があるかどうか知りたいですか?

 public enum TicketType {
    ECONOMY_NON_REF(1,"Economy Class, Non-Refundable"),
    ECONOMY_REF(2,"Economy Full Fare Refundable"),
    BUSINESS(3,"Business Class"),
    FIRST_CLASS(4,"First Class, Top of the world");

    private String code;
    private String description;
}

public class Traveler {
    private TicketType ticketType;
            public Traveler(TicketType ticketType) {
                this.ticketType = ticketType;
            }
}

@Test
public testCompareEnums{
    List<Traveler> travelersGroup1 = new ArrayList<Travelers>();
    travelersGroup1.add(new Traveler(TicketType.ECONOMY_REF));
    travelersGroup1.add(new Traveler(TicketType.BUSINESS));
    travelersGroup1.add(new Traveler(TicketType.ECONOMY_REF));
    travelersGroup1.add(new Traveler(TicketType.ECONOMY_NON_REF));

    //What is the best way to find the highest class passenger in travelersGroup1.
    assertEquals(TicketType.BUSINESS, getHighestClassTravler(travelersGroup1));

    List<Traveler> travelersGroup2 = new ArrayList<Travelers>();
    travelersGroup2.add(new Traveler(TicketType.ECONOMY_REF));
    travelersGroup2.add(new Traveler(TicketType.ECONOMY_NON_REF));
    travelersGroup2.add(new Traveler(TicketType.ECONOMY_REF));
    travelersGroup2.add(new Traveler(TicketType.ECONOMY_NON_REF));
    assertEquals(TicketType.ECONOMY_REF, getHighestClassTravler(travelersGroup2));
}

    private CredentialType getHighestClassTraveler(List travelers){
            Set uniqueTicketTypeSet = new HashSet();
            for (Traveler t: travelers) {
                     uniqueTicketTypeSet.add(t.getTicketType());
               }
             List<TicketType> uniqueTicketTypes = new ArrayList<TicketType>(uniqueTicketTypeSet);   
             Collections.sort(uniqueTicketTypes);
             return uniqueTicketTypes.get(uniqueTicketTypes.size()-1);
     }
4

1 に答える 1

1

あなたが投稿したコードには多くの問題があります (多くのエラーを修正しないとコンパイルできません) が、最も簡単な方法は、次のように Traveler に Comparable インターフェースを実装させることです。

  public int compareTo(Traveler other) {
       return this.getTicketType().compareTo(other.getTicketType());
  }

次に、TicketType が最も高い Traveler を見つけるには、次のようにします。

 Collections.max(travelers);
于 2012-10-27T05:09:57.177 に答える