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

在Java中将Comparable用于VO的多个动态字段

岳亮
2023-03-14
问题内容

我有一堂课

public class StudentVO {
   int age;
   String name;  
}

我在两个不同的领域使用了同一堂课。在一个地方,我需要根据年龄分类。在另一个地方,我需要根据名称进行排序,而在另一个地方,我可能需要根据年龄和名称进行排序。我怎样才能做到这一点?如果一个字段我可以覆盖compareTo()

是否有可能做到这一点?


问题答案:

1)您应该编写两个用于分别对年龄和名称进行排序的比较器,然后使用Collections.sort(List,Comparator)。像这样:

class StudentVO {
  private String name;
  private int age;
  public String getName() {
      return name;
  }
  public void setName(String name) {
      this.name = name;
  }
  public int getAge() {
      return age;
  }
  public void setAge(int age) {
      this.age = age;
  }
}

class AgeComparator implements Comparator<StudentVO> {

@Override
public int compare(StudentVO o1, StudentVO o2) {
    Integer age1 = o1.getAge();
    Integer age2 = o2.getAge();
    return age1.compareTo(age2);
  }

}

class NameComparator implements Comparator<StudentVO> {

  @Override
  public int compare(StudentVO o1, StudentVO o2) {
      return o1.getName().compareTo(o2.getName());
  }

}

然后使用它们,基于进行排序age

Collections.sort(list,new AgeComparator());

排序依据name

Collections.sort(list,new NameComparator());

2)如果您认为Listof
StudentVO具有某种自然的排序顺序,请说假设按by排序age。然后,将Comparable用于ageComparator用于name

 class StudentVO implements Comparable<StudentVO>{
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public int compareTo(StudentVO o) {
        return ((Integer)getAge()).compareTo(o.getAge());
    }
}

class NameComparator implements Comparator<StudentVO> {

    @Override
    public int compare(StudentVO o1, StudentVO o2) {
        return o1.getName().compareTo(o2.getName());
    }

 }

然后使用它们,基于进行排序age

Collections.sort(list);

排序依据name

Collections.sort(list,new NameComparator());


 类似资料:
  • 本文向大家介绍基于java中的PO VO DAO BO POJO(详解),包括了基于java中的PO VO DAO BO POJO(详解)的使用技巧和注意事项,需要的朋友参考一下 一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的ava对象。 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合PO中应该不包含任何对数据库的操作。 二、VO

  • 问题内容: 我正在尝试编写一个需要两个s 的泛型max函数。 到目前为止,我有 这无法编译与 我认为这是因为in 可以解释为参数a的一种类型,而参数b的另一种类型,因此无法进行比较。 我如何从这个洞中挖出自己? 问题答案: 为了获得最佳效果,您应该使用。 问题在于这表示类型T可与某种类型媲美,但您不知道该类型是什么。当然,根据常识,实现Comparable的类至少应该能够与自身进行比较(即,能够与

  • 我想设计一个动态存储过程,在其中我将传递列名、表名和where子句。以便使用存储过程在具有不同参数的不同表上运行select。 我不确定这是否可能。如果是,任何人都可以帮助我的例子。 例如。

  • 我开始使用验证框架用jax-rs验证json请求 是否可以根据另一个字段验证一个字段? 提前致谢

  • 我需要为站点实现一个反向代理/重定向服务,该服务将托管在AWS S3(静态JS资产)+CloudFront和作为不同任务运行的多个后端AWS ECS在Redirect或反向代理服务应该分析输入参数并重定向到相应的后端。 到目前为止,我已经找到了ECS-nginx-proxy,但它看起来更像是用于开发/阶段环境的工具。如何使用AWS服务如ALB+API Gateway、Lambda@Edge在生产中

  • 我有一个PHP脚本这是一个字符串替换函数,它接受数组中的字符,如果在字符串中找到任何字符,就替换它们。是否有与该函数等价的java函数。我找到了一些方法,但有些是使用循环,有些是重复语句,但在Java中没有找到类似的单行解决方案。