当前位置: 首页 > 知识库问答 >
问题:

我实现的可比性有问题

那绪
2023-03-14

因此,我尝试使用treeMap来创建数据集合,然后我希望在使用自己的比较器时获得一个排序列表。

我的问题是collections.sort会引发错误,因为只能迭代一个数组或java.lang.Iterable的实例,但我的extsListed是ArrayList类型,它确实是可迭代的,如http://docs.oracle.com/javase/8/docs/api/java/util/list.html所示

    List<FileInfo> extsListed = new ArrayList<FileInfo>(exts.values());

    for (FileInfo info : Collections.sort(extsListed)) {
        System.out.println(info.key + ' ' + info.count + ' ' + info.size);
    }

    System.out.println(totalFound.toString() + ' ' + totalSize);
}

public static class FileInfo implements Comparable<FileInfo>{
    String key;
    Integer count;
    Long size;

    public FileInfo(String key, File file){
        count = 1;
        this.key = key;
        this.size = file.length();
    }

    public int compareTo(FileInfo other) {
        if (this.size > other.size) return 1;
        else if (this.size == other.size) {
            if (this.key.compareTo(other.key) >= 1) return 1;
            else if (this.key.equals(other.key)) return 0;
            else return -1;
        }
        else return -1;
    }
}

共有1个答案

潘弘壮
2023-03-14

collections.sort返回void。它不会为您返回已排序的集合。在调用sort之后,可以简单地遍历集合本身:

Collections.sort(extsListed);
for (FileInfo info : extsListed) {
   ...
 类似资料:
  • 问题内容: 为什么使用Java ?为什么有人在课堂上实施?你需要实现可比性的真实示例是什么? 问题答案: 这是一个真实的例子。请注意,它也实现。 后来..

  • 我必须制作一个使用Java泛型的程序,并实现可比。代码基本上应该比较3个人的年龄,并告诉你真假。 我们必须在类中包含“int age”变量。 这就是我所做的: 和我的比较类: 当我运行这些时,我会得到这个错误:线程“main”java.lang.StackOverflowError中的异常 我认为错误在return compareTo(o)中,但我不明白如何将当前对象与传入的对象进行比较。 我也不

  • 我知道这些接口用于对集合中的对象进行排序。但我怀疑这两者的真正区别。我读到的一个事实是,如果要比较两个对象而不使用当前对象,请使用Compariable(此)。 但我的问题是即使使用比较器,我们也会比较相同的对象类型。 这里真正的区别是什么。我很困惑。假设下面的例子, 如果我使用比较器,我会让一个类实现比较器,而不是这个。年龄,它有人。年龄那么这里有什么不同呢? 我不知道Collections.s

  • 有人知道为什么这段代码没有对员工进行正确的排序吗?我需要他们按照工资的多少按升序排序。 我想我把smth搞砸了,因为我把工资存进了双打。但我真的不知道该怎么办。Plz帮助。 输出: 这也不管用

  • a、b默认都可选,但当a有值时,让b成为必填项。 应该如何实现?