Enums 比较Java6中的枚举
我试图找到比较Java6中枚举的最佳方法 比如说,我有一个可以与旅行者关联的票证类型的枚举。如果有旅客名单,我想知道旅行级别最高的旅客 我可以遍历旅行者列表,创建一组独特的TicketTypes,转换为list,对它们进行排序,返回最后一个元素作为最高值。我想知道有没有更好的办法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
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”的旅行者。如果你不需要,那么最大的票证类型就是你所需要的。