对于我类(class)中的一个作业,我们有一个名为 Pair 的类的集合,我们需要根据键的值按升序对其进行排序。
如果键是字符串或整数,我可以应用此方法,但如何编写代码来比较我的项目,当它们是通用的时,如下所示?
我类的教授解释了如何处理整数或字符串,但是当我的变量是通用的时,我完全不知所措。
以下是我的代码相关部分的副本。
import java.util.*;
public class Utils {
public static<K extends Comparable<K>, V> Collection<Pair<K,V>> sortPairCollection(Collection <Pair<K,V>> col){
ArrayList <Pair<K,V>> list = new ArrayList<>();
//Code to compare
return list;
}
public static void main(String[] args) {
ArrayList <Pair<String,Integer>> list = new ArrayList<>();
Pair<String, Integer> e = new Pair<>("One", 1);
list.add(e);
Pair<String, Integer> f = new Pair<>("Two", 2);
list.add(f);
Utils help = new Utils();
help.sortPairCollection(list);
}
}
这里的第二部分是我的 Pair 类的代码。 导入 java.io.Serialized; 导入java.util.Objects;
public class Pair <K,V> extends Object implements Serializable, Cloneable{
public Pair(K k, V v){
this.k = k;
this.v = v;
}
public K k(){
return k;
}
public V v(){
return v;
}
/*
... //irrelevant data omitted
*/
private final K k;
private final V v;
}
最佳答案
选项 1.使用比较器
public class Cmp<K extends Comparable<K>, V> implements Comparator<Pair<K, V>> {
@Override
public int compare(Pair<K, V> o1, Pair<K, V> o2) {
return o1.k.compareTo(o2.k);
}
}
public class Utils {
public static <K extends Comparable<K>, V> Collection<Pair<K, V>> sortPairCollection(
Collection<Pair<K, V>> col) {
ArrayList<Pair<K, V>> list = new ArrayList<>();
Collections.sort(list, new Cmp<>());
return list;
}
}
选项 2。 实现可比较
public class Pair<K extends Comparable<K>, V> implements Comparable<Pair<K, V>> {
private K k;
private V v;
@Override
public int compareTo(Pair<K, V> o) {
return k.compareTo(o.k);
}
}
public class Utils {
public static <K extends Comparable<K>, V> Collection<Pair<K, V>> sortPairCollection(Collection<Pair<K, V>> col) {
ArrayList<Pair<K, V>> list = new ArrayList<>();
Collections.sort(list);
return list;
}
}
或者只是
public class Utils {
public static <K extends Comparable<K>, V> Collection<Pair<K, V>> sortPairCollection(Collection<Pair<K, V>> col) {
ArrayList<Pair<K, V>> list = new ArrayList<>();
Collections.sort(list, (p, o) -> p.k.compareTo(o.k));
return list;
}
}
顺便说一句,您不必为静态方法创建实例。只需调用
Utils.sortPairCollection(list);
关于java - 使用 Comparable 比较通用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53202231/