Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用MyComparator类对ArrayList进行排序_Java_Sorting_Arraylist_Hashmap_Comparator - Fatal编程技术网

Java 使用MyComparator类对ArrayList进行排序

Java 使用MyComparator类对ArrayList进行排序,java,sorting,arraylist,hashmap,comparator,Java,Sorting,Arraylist,Hashmap,Comparator,我有一个HashMap,我把它复制到ArrayList中,然后我想根据每个条目的带宽对列表中的条目进行排序,带宽越高,它应该出现在列表中的第一个条目 这是我试过的 主类 ArrayList<Signal> messages = new ArrayList<Signal>(); messages.addAll(map.values()); Collections.sort(messages, new MyComparator()); ArrayList

我有一个HashMap,我把它复制到ArrayList中,然后我想根据每个条目的带宽对列表中的条目进行排序,带宽越高,它应该出现在列表中的第一个条目 这是我试过的

主类

   ArrayList<Signal> messages = new ArrayList<Signal>();
   messages.addAll(map.values());
   Collections.sort(messages, new MyComparator());
ArrayList messages=new ArrayList();
messages.addAll(map.values());
排序(消息,新的MyComparator());
我的比较器类

public class MyComparator implements Comparator<Signal>{

@Override
public int compare(Signal s1, Signal s2) {
    if (s1.getBandwidth() > s2.getBandwidth() ) {
        return -1;
    } else if (s1.getBandwidth() < s2.getBandwidth()) {
        return 1;
    }
    return 0;
  }
}
公共类MyComparator实现Comparator{
@凌驾
公共整数比较(信号s1、信号s2){
如果(s1.getBandwidth()>s2.getBandwidth()){
返回-1;
}else if(s1.getBandwidth()
它不会根据带宽对信号对象进行排序

我做错了什么

问题已解决

实际上,我在排序之前没有设置带宽

下面是代码,希望对大家有所帮助

  public void createSortedSet(HashMap<String, Signal> map,
        final BufferedWriter buffwriter, long totalSize) {

    try {
        messages.addAll(map.values());
        for (Signal signal : messages) {
            signal.setBandwidth((signal.getSize() / (float) totalSize) * 100);
        }
        Collections.sort(messages, new MyComparator());

    } catch (Exception e) {
        e.printStackTrace();
    }
    createCSV(buffwriter, messages);
}
public void createSortedSet(HashMap映射,
最终缓冲写入程序buffwriter,长总大小){
试一试{
messages.addAll(map.values());
用于(信号:消息){
signal.setBandwidth((signal.getSize()/(float)totalSize)*100);
}
排序(消息,新的MyComparator());
}捕获(例外e){
e、 printStackTrace();
}
createCSV(buffwriter,messages);
}

谢谢

您看到的是相同的顺序还是它们没有按照预期的顺序排序?它是否按照带宽的相反顺序对对象进行排序?实际上看起来很好:/我要做的唯一更改是将比较方法更改为:
返回s2.getBandwidth()-s1.getBandwidth()简单看一下,比较方法看起来不错。给我们一个例子,在地图中放置一些硬编码的值并打印出一些东西,表明它不正确。函数的单行版本-
返回-Integer.compare(s1.getBandwidth(),s2.getBandwidth())