2015-10-15 136 views
-2

我需要使用PriorityQueue对Person对象进行排序。优先级队列排序字符串

Person类:

public class Person implements Comparable<Person>{ 
    private String firstName; 
    private String lastName; 

    public Person(String firstName, String lastName){ 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String getFirstName() {return firstName;} 

    public String getLastName() {return lastName;} 

    public String toString(){ 
     return "Name: " + firstName + " " + lastName + "\n"; 
    } 

    public int compareTo(Person p){ 
     String pname1 = firstName + lastName; 
     String pname2 = p.firstName + p.lastName; 
     return pname1.compareTo(pname2); 
    } 

的主要代码:

import java.util.PriorityQueue; 

    public class priorityQ{ 
     public static void main(String[] args){ 
      PriorityQueue<Person> pers = new PriorityQueue<Person>(); 
      pers.add(new Person("Sam", "Smith")); 
      pers.add(new Person("Charlie", "Black")); 
      pers.add(new Person("Betty", "Brown")); 
      pers.add(new Person("Jessica", "Stewart")); 
      pers.add(new Person("John", "Friday")); 
      pers.add(new Person("Frank", "Folcy")); 
      System.out.print(pers);  
     } 
    } 

我需要:

  1. 打印照片,无需排序(在主已经完成)
  2. 排序姓氏
  3. 按名排序,然后姓氏

我不能在Person类中更改任何代码。

我创建新类:

import java.util.Comparator; 
    public class LastNameComparator implements Comparator<Person>{ 
     public int compareTo(Person a, Person b){ 
     Person p1 = (Person)a; 
     Person p2 = (Person)b; 
     if(p1.getLastName().equals(p2.getLastName())) 
     { 
      return p1.getFirstName().compareTo(p2.getFirstName()); 
     } 
     return p1.getLastName().compareTo(p2.getLastName()); 
     } 
    } 

它有一个编译错误:

LastNameComparator.java:2: error: LastNameComparator is not abstract and does not override abstract method compare(Person,Person) in Comparator 
+0

你还需要使用'PriorityQueue'吗? –

+0

做错误信息告诉你:'不重写compare(Person,Person)' - 你把它命名为compareTo – EGOrecords

+0

@Override Annotation会告诉你错误,因为compareTo不会覆盖任何东西。 – EGOrecords

回答

0

首先你必须从person class及其所有的实现去除comparable interface : 试着这样做:

import java.util.Comparator; 
    public class LastNameComparator implements Comparator<Person>{  
    @Override 
    public int compare(Person o1, Person o2) { 

     return o1.lastname.compareTo(o2.lastname); 
    } 
    } 

而且在main method做了这么以下rt按姓氏:

Collections.sort(pers,new LastNameComparator()); 
    Iterator<Person> it = pers.iterator(); 
    while(it.hasNext()){ 
     System.out.println(it.next()); 
     } 
+0

请让我知道@Konorika是否适合你 – Roushan45

0

首先: 请删除

implements Comparable<Person> 

public int compareTo(Person p){ 
     String pname1 = firstName + lastName; 
     String pname2 = p.firstName + p.lastName; 
     return pname1.compareTo(pname2); 
    } 

来自Person类,因为你没有大声地做任何改变。

第二: 比较类只有比较(T ob1,T2 ob2)方法,没有public int compareTo(Person a,Person b)。 因此,请创建比较(T ob1,T2 ob2)并在其上放置@Override注释以确保您做的一切正确。

所以,毕竟你比较类必须

@Override 
public int compare(Person a, Person b){ 
//..your code 
} 

休息的代码看起来不错,从快看......