Enums 比较Java6中的枚举

Enums 比较Java6中的枚举,enums,java-6,Enums,Java 6,我试图找到比较Java6中枚举的最佳方法 比如说,我有一个可以与旅行者关联的票证类型的枚举。如果有旅客名单,我想知道旅行级别最高的旅客 我可以遍历旅行者列表,创建一组独特的TicketTypes,转换为list,对它们进行排序,返回最后一个元素作为最高值。我想知道有没有更好的办法 public enum TicketType { ECONOMY_NON_REF(1,"Economy Class, Non-Refundable"), ECONOMY_REF(2,"Economy

我试图找到比较Java6中枚举的最佳方法

比如说,我有一个可以与旅行者关联的票证类型的枚举。如果有旅客名单,我想知道旅行级别最高的旅客

我可以遍历旅行者列表,创建一组独特的TicketTypes,转换为list,对它们进行排序,返回最后一个元素作为最高值。我想知道有没有更好的办法

 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);
     }
public enum TicketType{
经济舱(1,“经济舱,不退款”),
经济舱参考(2,“经济舱全额票价可退款”),
商务(3,“商务舱”),
头等舱(4,“头等舱,世界顶级”);
私有字符串码;
私有字符串描述;
}
公务舱旅客{
私人票证类型票证类型;
公共旅行者(票证类型票证类型){
this.ticketType=ticketType;
}
}
@试验
公共试验室{
List travelersGroup1=新建ArrayList();
travelersGroup1.add(新旅行者(TicketType.ECONOMY_REF));
travelersGroup1.add(新旅行者(TicketType.BUSINESS));
travelersGroup1.add(新旅行者(TicketType.ECONOMY_REF));
travelersGroup1.add(新旅行者(票号类型:ECONOMY\u NON\u REF));
//在travelersGroup1中找到头等舱乘客的最佳方式是什么。
assertEquals(TicketType.BUSINESS,getHighestClassTravler(travelersGroup1));
List travelersGroup2=新建ArrayList();
travelersGroup2.add(新旅行者(TicketType.ECONOMY_REF));
travelersGroup2.add(新旅行者(票号类型:ECONOMY\u NON\u REF));
travelersGroup2.add(新旅行者(TicketType.ECONOMY_REF));
travelersGroup2.add(新旅行者(票号类型:ECONOMY\u NON\u REF));
资产质量(TicketType.ECONOMY_REF,getHighestClassTravler(travelersGroup2));
}
私人凭证类型getHighestClassTraveler(列出旅行者){
Set uniqueTicketTypeSet=newhashset();
对于(旅行者t:旅行者){
添加(t.getTicketType());
}
List uniqueTicketTypes=newarraylist(uniqueTicketTypeSet);
Collections.sort(uniqueTicketTypes);
返回uniqueTicketTypes.get(uniqueTicketTypes.size()-1);
}

您发布的代码有很多问题(如果不修复很多错误,它将无法编译),但最简单的方法是让Traveler实现类似的接口,如下所示:

  public int compareTo(Traveler other) {
       return this.getTicketType().compareTo(other.getTicketType());
  }
然后,要找到票证类型最高的旅行者,您只需执行以下操作:

 Collections.max(travelers);

你试过什么?您是否有getHighestClassTravler()的有效实现?
private CredentialType getHighestClassTraveler(列出旅行者){Set-uniqueTicketTypeSet=new HashSet();for(Traveler t:travelers){uniqueTicketTypeSet.add(t.getTicketType());}List-uniqueTicketTypes=new-ArrayList(uniqueTicketTypeSet);Collections.sort(uniqueTicketTypes);返回uniqueTicketTypes.get(uniqueTicketTypes.size()-1);}
谢谢@greybeardgeek。我在平板电脑上输入了代码,但实际上并没有编译。因为枚举已经实现了可比较的接口,所以我在一组唯一的TicketTypes上使用了Collections.max()。是的,如果需要的话,这会得到max TicketTypes。使Traveler实现可比性允许您找到具有“max TicketType”的旅行者。如果你不需要,那么最大的票证类型就是你所需要的。