java - java 集合排序的绑定(bind)不匹配

标签 java collections comparator

您好,需要有关 java 集合排序的帮助。它给了我这个错误:

Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable for the arguments (List<WifiSSID>). 
The inferred type WifiSSID is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>

我的代码如下:

public class WifiSSID {

    public String SSIS;
    public double id;
}


 public class ScanFilterWifiList {

    public ScanFilterWifiList(List<WifiSSID> wifiList) {
        Collections.sort(wifiList);
           //Collections.sort(wifiList, new SortSSIDByid()); tried this also.
    }
}
interface Comparator<WifiSSID>
{
    int compare(WifiSSID obj1, WifiSSID obj2);
}

class SortSSIDByid implements Comparator<WifiSSID>
{
    @Override
    public int compare(WifiSSID ssid1, WifiSSID ssid2) 
    {
        int value = 0; 
        if (ssid1.id > ssid2.id) 
            value = 1; 
        else if (ssid1.id < ssid2.id) 
            value = -1; 
        else if (ssid1.id == ssid2.id) 
            value = 0; 
        return value; 
     }
}

我做错了什么吗?

最佳答案

您无法对未实现 Comparable 接口(interface)的对象列表进行排序。或者更确切地说,您可以,但必须为 Collections.sort() 方法提供一个 Comparator

想一想:在不知道 WifiSSID 何时小于或大于另一个 WifiSSID 的情况下,Collections.sort() 如何对列表进行排序?

您想使用Collections.sort(wifiList, new SortSSIDByid());

编辑:

您定义了自己的专有Comparator 接口(interface),并在SortSSIDByid 中实现了此专有Comparator 接口(interface)。 Collections.sort() 需要一个 java.util.Comparator 实例。不是您专有的比较器接口(interface)的实例,它不知道。

关于java - java 集合排序的绑定(bind)不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19196393/

相关文章:

java - 使用自己实现的链表时出错

java - 按日期排序对象列表并应用过滤器

Java多线程难点

java - 确定 ServiceLocator 没有用户定义的服务

java - Transformer 对象自动将命名空间附加到子元素

Java Collections.unmodifiableList() 时间复杂度

collections - meteor collection.update权限

java - 读取客户端发送的 google awt servlet 中的数据

java - Collection.stream().forEach() 和 Collection.forEach() 有什么区别?

Java 实现 PriorityQueue - 当没有提供 Comparator 时