Java基于字符串对自定义对象列表进行排序

时间:2015-05-07 12:15:43

标签: java list sorting

class Person 
 {
 private String name;
 private String profession;
}

职业有价值观:

  
      
  • 工程师
  •   
  • 医生
  •   
  • 教师
  •   
  • 学生
  •   

我有人员名单,并希望在职业的基础上对其进行排序。 工程师先是医生,然后是老师,然后是学生。

是否可以使用类似的界面对其进行排序。

7 个答案:

答案 0 :(得分:1)

是的,你可以实现可比性。创建方法compareTo(Person obj),然后编写自定义逻辑。您可以按字母顺序或任何其他算法进行比较 - 例如医生之前的工程师,因为他赚的钱更多:)对于字母比较,您可以这样做:

#ifndef AES_H
#define AES_H
#include <CkCrypt2.h>
#include <string>

class AES
{
public:
  AES();
  ~AES();
  void setUpAES();
  void encrypt(const char* str);
  void decrypt(char* crypto);
  std::string _crypto;
  const char* _message;

private:
  CkCrypt2 _crypt;
  bool _success;
  const char* _AESkey;
  bool _isKeySet;
};

#endif // AES_H

之后你只需使用Collections.sort

答案 1 :(得分:1)

为变量添加枚举:

class Person implements Comparable<Person> {

@Override
public int compareTo(Person o) {
    return this.profession.compareTo(o.getProfession());

  }
  private String name;
  private String profession;
}

之后可以将功能添加到Person类,这将为您提供专业价值:

class Person {
   private String name;
   private String profession;
   private enum enumProffesion
    {
        Doctor, Teacher, student;
    }
}

之后,您只需实现将对所有人进行排序的逻辑。为此,您可以通过以下答案帮助自己:sorting integers in order lowest to highest java

答案 2 :(得分:1)

您可以使用Collection.sort这样的方法对自定义对象进行排序,

Collections.sort(list, new Comparator(){

        public int compare(Object o1, Object o2) {
            Person p1 = (Person) o1;
            Person p2 = (Person) o2;
            return p1.getProfession().compareToIgnoreCase(p2.getProfession());
        }

    });

Sort中的reverse order只需按照此return语句行生成,

p2.getProfession().compareToIgnoreCase(p1.getProfession());

这将直接使您的list排序。

答案 3 :(得分:0)

我的建议 -

1。创建新课程event.preventDefault() -

Profession

2。现在为维护订单的每个class Profession{ public Profession(Integer id, String prefessionName){ this.id=id; this.prefessionName=prefessionName; } Integer id; String professionName; } 对象/实例提供ID。例如 -

Profession

3。现在使用 Profession engineer = new Profession(1, "Engineer"); //since Engineer is in first place Profession doctor = new Profession(2, "Doctor"); //since Doctor is in second place Profession teacher = new Profession(3, "Teacher"); Profession student = new Profession(4, "Student"); 界面对Profession的{​​{1}}进行排序。

答案 4 :(得分:0)

在Person类中添加专业的getter和setter,只需使用下面的代码

class Person {
   private String name;
   private String profession;
   public String getProfession() {  
        return profession;  
    }  
    public void setProfession(String profession) {  
        this.profession = profession;  
    }
}


List<Person> personList = new ArrayList<Person>(); 

Person p1 = new Person();
p1.setProfession("Engineer"); 
personList.add(p1);

Person p2 = new Person();
p2.setProfession("Doctor"); 
personList.add(p2);

Person p3 = new Person();
p3.setProfession("Teacher"); 
personList.add(p3);

Person p4 = new Person();
p4.setProfession("student"); 
personList.add(p4);


Collections.sort(personList, new Comparator() {  
@Override  
public int compare(Object obj1, Object obj2) {  
Person p1 = (Person)obj1;  
Person p2 = (Person)obj2;  
return p1.getProfession().compareToIgnoreCase(p2.getProfession());  
}  
});

答案 5 :(得分:0)

如果Method threw 'com.hp.hpl.jena.sparql.ARQException' exception. Cannot evaluate com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.toString() 替换profession字段,则可以轻松完成:

enum

这里class Person implements Comparable<Person> { private String name; private Profession profession; // by this we'll define natural ordering based on ordering // in which `Profession` enum values are declared @Override public int compareTo(Person p) { return this.profession.compareTo(p.profession); } } 枚举:

Profession

答案 6 :(得分:0)

两种方式:

  1. 实施Comparable界面
  2. 创建Comparator
  3. 使用第一种方法,您只能通过一种方法compareTo对集合进行排序,您将定义

    您的Person.java

    class Person implements Comparable<Person> {
        private String name;
        private String profession;
    
        @Override
        public int compareTo(Person o) {
            return this.profession.compareTo(o.getProfession());
        }
    
        public String getName() {
            return name;
        }
    
        public String getProfession() {
            return profession;
        }
    }
    

    然后你需要打电话:

    Collections.sort(yourCollection);
    

    使用第二种方式,您可以按一个或多个Comparator进行排序,这样您就可以将同一个集合与不同的标准进行比较。

    两个Comparator

    的示例
    public class PersonSortByNameComparator implements Comparator<Person>{
    
        @Override
        public int compare(Person p1, Person p2) {
            return p1.getName().compareTo(p2.getName());
        }
    
    }
    
    public class PersonSortByAlphabeticalProfessionComparator implements Comparator<Person>{
    
        @Override
        public int compare(Person p1, Person p2) {
            return p1.getProfession().compareTo(p2.getProfession());
        }
    
    }
    

    或者你需要的那个:

    public class PersonSortByProfessionComparator implements Comparator<Person> {
    
        @Override
        public int compare(Person p1, Person p2) {
            if(p1.getProfession().equalsIgnoreCase(p2.getProfession())
                return 0;
            if(p1.getProfession().equalsIgnoreCase("student")
                return -1;
            if(p1.getProfession().equalsIgnoreCase("engineer")
                return 1;
            if(p1.getProfession().equalsIgnoreCase("doctor")
                return 1;
            else
                return -1;
        }
    }
    

    然后给其中一个打电话:

    Collections.sort(yourCollection, new PersonSortByNameComparator());
    

    This blog article写得非常好,你可以举一些例子