gpt4 book ai didi

java - 类型组的比较器

转载 作者:行者123 更新时间:2023-12-01 07:33:31 25 4
gpt4 key购买 nike

我想对对象数组进行排序。每个对象都有 getType() 方法,该方法返回字符串中的对象类型。

我想根据类型(例如优先级)对数组进行排序。

示例:

Input { A, F, Z, G, E, D, C }

If(type == A or B or C or D) top
If(type == E) second
If(type == F or G) third
If(differet type) last

Output: { A, C, D, E, F, G, Z }

我的比较器应该是什么样子?

如果我的问题表述得不够清楚,请写评论,我会尝试更简短地解释不清楚的部分。

最佳答案

您可以声明优先级 HashMap :

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);
}

然后实现 Comparatorcompare 方法:

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);
}

更新:更简洁的方法是在基类中定义 hashmap(其中声明了 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);
}

关于java - 类型组的比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15197740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com