繁体   English   中英

java集合排序的绑定不匹配

[英]Bound mismatch for java Collections sorting

您好需要有关 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接口的对象列表进行排序。 或者更确切地说,您可以,但您必须为Collections.sort()方法提供一个Comparator

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

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

编辑:

您定义了自己的专有Comparator接口,并在SortSSIDByid实现了这个专有 Comparator 接口。 Collections.sort()一个java.util.Comparator实例。 不是您的专有 Comparator 接口的实例,它不知道。

只需添加这个 import import java.util.Comparator;

并删除此接口

interface Comparator<WifiSSID>
{
    int compare(WifiSSID obj1, WifiSSID obj2);
}

您的SortSSIDByid比较器类现在将实现java.util.Comparator ,这是Collections.sort()方法所需要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM