java集合排序的绑定不匹配

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19196393/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 14:57:20  来源:igfitidea点击:

Bound mismatch for java Collections sorting

javacollectionscomparator

提问by nilkash

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

您好需要有关 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>>

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?

我做错了什么吗?

采纳答案by JB Nizet

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

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

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

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

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

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

EDIT:

编辑:

You defined your own proprietary Comparatorinterface, 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.

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

回答by SudoRahul

Just add this import import java.util.Comparator;

只需添加此导入 import java.util.Comparator;

and remove this interface

并删除此接口

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

Your SortSSIDByidcomparator class will now implement java.util.Comparatorand that is what is required by the Collections.sort()method.

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