用于java集合排序的绑定不匹配 [英] Bound mismatch for java Collections sorting

查看:367
本文介绍了用于java集合排序的绑定不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您需要帮助关于java集合排序。它给我这个错误:

 绑定不匹配:类型集合的通用方法sort(List< T>)不适用于参数(List< WifiSSID>)。 
推断类型WifiSSID不是有界参数的有效替代< T extends Comparable<?超级T>

我的代码如下:

  public class WifiSSID {

public String SSIS;
public double id;
}


public class ScanFilterWifiList {

public Sc​​anFilterWifiList(List< WifiSSID> wifiList){
Collections.sort(wifiList);
//Collections.sort(wifiList,new SortSSIDByid());也试过这个。
}
}
接口比较器< 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;
返回值;
}
}

我做错了什么?

解决方案

不能对未实现 Comparable 接口的对象列表。或者,您可以,但必须向 Collections.sort()方法提供 Comparator

想想: Collections.sort()如何排序列表而不知道WifiSSID何时小于或大于

$

>

编辑:



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


Hi need Help regarding java collection sorting. It gives me this error:

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>>

My code looks like:

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

Am I doing anything wrong?

解决方案

You can't sort a List of objects that don't implement the Comparable interface. Or rather, you can, but you have to provide a Comparator to the Collections.sort() method.

Think about it: how would Collections.sort() sort your list without knowing when a WifiSSID is smaller or bigger than another one?

You want to use Collections.sort(wifiList, new SortSSIDByid());

EDIT:

You defined your own proprietary Comparator interface, and implement this proprietary Comparator interface in SortSSIDByid. Collections.sort() wants an intance of java.util.Comparator. Not an instance of your proprietary Comparator interface, that it doesn't know.

这篇关于用于java集合排序的绑定不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆