当前位置: 首页 > 面试题库 >

Java比较器给定的属性名称进行比较

长孙朝明
2023-03-14
问题内容

我的问题是
我必须订购一个数据表。表的每一行都是一个存储在List中的对象(简称为TableObject)。数据的每一列都是该类的属性(通常是String)。

当用户单击任何列时,我必须对数据进行典型的排序。所以我考虑过将List更改为TreeSet并在TableObject中实现Comparator。

当我尝试重新排序TreeSet时出现问题。首先比较起来比较容易(省略parseInt中的异常查找):

   public int compare(TableObject to1, TableObject to2){
        TableObject t1 = to1;
        TableObject t2 = to2;

        int result = 1;

        if(Integer.parseInt(t1.getId()) == Integer.parseInt(t2.getId())){result=0;}
        if(Integer.parseInt(t1.getId()) < Integer.parseInt(t2.getId())){result=-1;}

        return result;

    }

但是,当我不得不根据数据的文本或其他数十种数据对TableObject进行重新排序时,我遇到了问题。我不想创建数十个比较函数,每个比较函数一个。我不想使用开关(或ifs链)来决定如何比较对象。

有没有办法以某种方式(例如自反)来执行此操作,这并不意味着我将像几百行几乎相同的代码一样编写代码?

谢谢大家!


问题答案:

Bean比较器应该可以工作。

使用Reflection BeanComparator可以使您对具有零参数方法的任何属性进行排序,该方法返回该属性的值。

因此,基本上,您可以对具有“ getter”方法的任何属性进行排序。



 类似资料:
  • 问题内容: 我有以下 我想将此日期与今天的日期进行比较(即我想知道这是今天之前还是今天之前) 我需要使用什么功能? 问题答案: 将其转换为时间值 给你几秒钟 将检查是否已在最后一天之内。

  • 我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和

  • 问题内容: Comparable和Comparator之间的主要区别是什么。 在什么情况下,哪个比另一个优先? 问题答案: 当你的类实现时,该类的方法将定义该对象的“自然”顺序。根据合同,该方法有义务(尽管不要求)与该对象上的其他方法保持一致,例如,当比较返回true 时,应始终为对象返回0 。 一个比较本身就是如何比较两个对象的定义,可用于可能不与自然顺序排列的方式来比较的对象。 例如,字符串通

  • Java在进行比较时抛出的错误是: 然后比较的方法(比较器 你知道发生了什么事吗?

  • 我是一个初学者,正在试图弄清楚如何使用嵌套的if/else和switch语句。我决定挑战自己,编写两个程序(一个用if/else和一个用switch),将一个人的名字与至少15个人的名字进行比较。如果这1个名字与其他15个名字中的任何一个匹配(除了那个人自己的名字之外),它将打印一些东西。例如,这15个名字将是一个足球队中每个人的名字。我想看看队里是否有人和他们同名。对于if/else程序,我目前