类型Long没有定义compare(long, long)方法。

9

我需要制作一个比较器,通过其中一个long类型的变量对对象列表进行排序。

public class ParticipantIndexComparator implements Comparator<Integer> {
        final List<Participant> participants;       
        public ParticipantIndexComparator(ArrayList<Integer> numbersToSort) {
            participants=new ArrayList<Participant>();
            for (int i=0;i<numbersToSort.size();i++)
            { participants.add(i,competition.participant.get(numbersToSort.get(i))); participants.get(i).comparator=numbersToSort.get(i);}

        }

        @Override
        public int compare(Integer i1, Integer i2) {
            long l1 = participants.get(i1).kpTime.get(kpSelected); 
            long l2 = participants.get(i2).kpTime.get(kpSelected);
              return Long.compare(l1, l2);
        }


    }

但是return Long.compare(l1, l2);是无效的 - "The method compare(long, long) is undefined for the type Long".

看起来我做错了。


participants.get(i).comparator=numbersToSort.get(i) 为什么要将单个数字赋值给名为 comparator 的东西? - kajacx
2个回答

26

自Java 7以来,这种方法就存在了。你可能正在使用Java 6甚至更早版本的Java。在这些以前的版本中,你可以简单地使用

Long.valueOf(l1).compareTo(Long.valueOf(l2));

javadoc 是您的好朋友,请阅读。


@Woot4Moo:签名是正确的。OP想要比较整数,而不是长整型。这些整数用于找到与之关联的长整数值,并且应该根据这个长整数值进行排序。就像你按照Person类型的lastName(String类型)对人员进行排序一样。 - JB Nizet
JB Nizet,完全正确!我正在使用它与Java 6一起编码Android。 - Vlad Alexeev
非常感谢!我已经以2到3种不同的方式询问了这个问题,人们总是试图将两个索引与变量进行比较,而不是比较变量本身。在这里,人们不读问题是很常见的事情。例如,当我正在寻找一种在Android中以几行相同的方式膨胀视图的方法时,就像文本一样-当填充第一行时-它从下一行的开头开始。我的答案是一个简单的GridView,但人们开始给我关于处理文本的建议。 - Vlad Alexeev

1
如果在将Maven项目导入Eclipse后,遇到Integer.compare未定义的情况,请检查项目属性以确保其使用1.7 JRE。由于某种原因,即使POM和我的系统默认为1.7.*,导入将1.6 JRE与我的项目关联起来。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接