優先度ハッシュ マップを宣言できます。
private static final HashMap<String,Integer> PRIORITIES = new HashMap<String, Integer>();
static{
PRIORITIES.put("A", 1);
PRIORITIES.put("B", 1);
PRIORITIES.put("C", 1);
PRIORITIES.put("D", 1);
PRIORITIES.put("E", 2);
PRIORITIES.put("F", 2);
PRIORITIES.put("G", 3);
}
compare
次に、あなたのメソッドを実装しますComparator
:
private int getPriority(CustomClass obj) {
if(obj!=null&&PRIORITIES.containsKey(obj.getType())) {
priority1 = PRIORITIES.get(obj.getType());
} else {
priority1 = Integer.MAX_VALUE;
}
}
@Override
public int compare(CustomClass o1, CustomClass o2) {
int priority1,priority2;
priority1 = getPriority(o1);
priority2 = getPriority(o2);
return priority1==priority2 ? 0 : (priority1<priority2 ? -1 : 1);
}
更新:よりクリーンなアプローチは、基本クラス(getType
宣言されている場所)でハッシュマップを定義し、メソッドを実装getPriority
することです:
public int getPriority() {
return PRIORITIES.containsKey(getType()) ? PRIORITIES.get(getType()) : Integer.MAX_VALUE;
}
それからComparator
明らかです:
@Override
public int compare(CustomClass o1, CustomClass o2) {
int priority1,priority2;
priority1 = o1==null ? Integer.MAX_VALUE : o1.getPriority();
priority2 = o2==null ? Integer.MAX_VALUE : o2.getPriority();
return priority1==priority2 ? 0 : (priority1<priority2 ? -1 : 1);
}