Java 需要帮助为我的工作面试代码示例编写一个比较程序

Java 需要帮助为我的工作面试代码示例编写一个比较程序,java,comparator,Java,Comparator,我需要帮助来编写一个比较器:- public class LastNameComparator implements Comparator<Person> { public int compare(Person name_one, Person name_two) { // TODO Auto-generated method stub if(name_one.getGender().equals(name_two.getGender())){

我需要帮助来编写一个比较器:-

public class LastNameComparator implements Comparator<Person> {


public int compare(Person name_one, Person name_two) {
        // TODO Auto-generated method stub
        if(name_one.getGender().equals(name_two.getGender())){
            return name_one.getLast_name().compareTo(name_two.getLast_name());

        }else{
        return name_one.getLast_name().compareTo(name_two.getLast_name());
        }
    }

}
我想要这个输出:-

Martin Joseph Male 4/2/1979 Green 
Ramya  Patil  Female 5/4/2009 Red
Don    kelly  Male   5/6/1986 Yellow
Van    Shinde female 3/4/1984 Green
Output 1:
 Van    Shinde female 3/4/1984 Green
 Don    kelly  Male   5/6/1986 Yellow
 Ramya  Patil  Female 5/4/2009 Red
 Martin Joseph Male 4/2/1979 Green 
但我得到以下输出:-

Martin Joseph Male 4/2/1979 Green 
Ramya  Patil  Female 5/4/2009 Red
Don    kelly  Male   5/6/1986 Yellow
Van    Shinde female 3/4/1984 Green
Output 1:
 Van    Shinde female 3/4/1984 Green
 Don    kelly  Male   5/6/1986 Yellow
 Ramya  Patil  Female 5/4/2009 Red
 Martin Joseph Male 4/2/1979 Green 
如何按姓氏排序,保持列表的顺序不变。。我的意思是我想先输出女性姓氏排序,然后输出男性姓氏排序。。。请帮帮我,伙计们

这是我在使用性别比较器后使用的比较器:-

public class LastNameComparator implements Comparator<Person> {


public int compare(Person name_one, Person name_two) {
        // TODO Auto-generated method stub
        if(name_one.getGender().equals(name_two.getGender())){
            return name_one.getLast_name().compareTo(name_two.getLast_name());

        }else{
        return name_one.getLast_name().compareTo(name_two.getLast_name());
        }
    }

}
公共类LastNameComparator实现Comparator{
公共整数比较(人名1,人名2){
//TODO自动生成的方法存根
如果(name_one.getGender().equals(name_two.getGender())){
返回name_one.getLast_name().compareTo(name_two.getLast_name());
}否则{
返回name_one.getLast_name().compareTo(name_two.getLast_name());
}
}
}

作为对cletus答案的补充,这里有一个使用a的版本(来自Apache Commons Lang):


作为对cletus答案的补充,这里有一个使用a的版本(来自ApacheCommonsLang):


当我阅读OP中的代码时,我发现您总是返回按姓氏进行比较的结果:

If genders are equal
  then compare last names
  else compare last names

然而,这与你所说的实验结果没有多大关系;因此,除了修改您的代码以符合Cletus的建议外,您的代码可能还有其他问题。

当我在您的OP中阅读代码时,我发现您总是返回按姓氏进行比较的结果:

If genders are equal
  then compare last names
  else compare last names

然而,这与你所说的实验结果没有多大关系;因此,除了修改您的代码以符合Cletus的建议外,您的代码可能还存在其他问题。

Cletus的解决方案可能是最合适的,但如果您想更进一步

LastNameComparator
的名称相当误导,因为它实际上是在性别和姓氏上进行比较的。将此功能拆分为两个独立的
比较器可能不那么模棱两可:

class GenderComparator implements Comparator<Person> {
    public int compare(Person a, Person b) {
        return a.getGender().compareTo(b.getGender());
    }
}

class LastNameComparator implements Comparator<Person> {
    public int compare(Person a, Person b) {
        return a.getLastName().compareTo(b.getLastName());
    }
}

它更复杂,但更灵活和可重用。(对于这样一个简单的案例,这可能是合理的,也可能不是合理的。)

Cletus的解决方案在这里可能是最合适的,但是如果你想更进一步

LastNameComparator
的名称相当误导,因为它实际上是在性别和姓氏上进行比较的。将此功能拆分为两个独立的
比较器可能不那么模棱两可:

class GenderComparator implements Comparator<Person> {
    public int compare(Person a, Person b) {
        return a.getGender().compareTo(b.getGender());
    }
}

class LastNameComparator implements Comparator<Person> {
    public int compare(Person a, Person b) {
        return a.getLastName().compareTo(b.getLastName());
    }
}

它更复杂,但更灵活和可重用。(对于这种简单的情况,这可能是合理的,也可能不是合理的。)

这应该是相对简单的:

以下是您指定的规则:

  • 女性先于男性
  • 按姓氏升序排序的姓名
你可以这样做:

// if the genders are not equal, return <0 if this object's gender is female
// else 
//    return lastName.compareTo( obj.lastName );

//如果性别不相等,返回这应该相对简单:

以下是您指定的规则:

  • 女性先于男性
  • 按姓氏升序排序的姓名
你可以这样做:

// if the genders are not equal, return <0 if this object's gender is female
// else 
//    return lastName.compareTo( obj.lastName );

//如果性别不相等,则返回任何值,它看起来像您的getLast_name()可能是罪魁祸首。为工作面试代码样本寻求帮助似乎是不道德的……除非潜在雇主知道你正在获得帮助。希望面试官也这么认为……如果你的
结果相同,那么你的
。想知道你为什么需要一个条件吗?有趣的是,我问采访我的人是否有这样的账户。如果我看到我提出的问题中有一个是经过深思熟虑的,有着明确知识的OP,我会倾向于赞同他们。不幸的是,这个问题在谈到OP时并没有给人留下很好的印象……如果有的话,它看起来像你的getLast_name()可能是罪魁祸首。为工作面试代码样本寻求帮助似乎是不道德的……除非潜在雇主知道你正在获得帮助。希望面试官也这么认为……如果你的
结果相同,那么你的
。想知道你为什么需要一个条件吗?有趣的是,我问采访我的人是否有这样的账户。如果我看到我提出的问题中有一个是经过深思熟虑的,有着明确知识的OP,我会倾向于赞同他们。不幸的是,这个问题在谈到OP时给人的印象不是很好……如果你喜欢的话,apache commons有内置的comparator链接:因此commons
Comparators
类的相关代码应该是
comparator c=Comparators.chain(new GenderComparator(),new LastNameComparator())。如果您喜欢,apache commons具有内置的comparator链接:因此commons
Comparators
类的相关代码应该是
comparator c=Comparators.chain(new GenderComparator(),new LastNameComparator())。看起来很整洁。