java - 这个字符串比较方法有问题

标签 java arrays string methods

以下方法需要返回字典中姓氏排在第一位的人的姓名。如果姓氏相同,该方法将比较人员的名字,并根据字典确定其中哪个具有名字。 例如 : 名字:“dan”、“coco”、“rocky”。将返回名称“coco”,因为字典中“c”位于“d”之前。 方法是:

 public String firstPerson()
    {
        String   lastName=_persons[0].getLastName();
        String firstName=_persons[0].getFirstName();
        String answer=_persons[0].getFirstName();
        for(int i=0;i<_numOfPersons;i++)
        {
            if((_persons[i].getLastName().compareToIgnoreCase(lastName))>0)
            {
                lastName=_persons[i].getLastName();
                answer=_persons[i].getFirstName();
            }
            else if((_persons[i].getLastName().compareToIgnoreCase(lastName))==0)
            {
                if((_persons[i].getFirstName().compareToIgnoreCase(firstName))>0)
                answer=_persons[i].getFirstName();
            }
        }
        return answer;
    }

我认为这是解决方案,但由于某种原因,该方法总是返回数组中的最后一个人,而不是我需要的人。

最佳答案

本质上,您正在尝试通过复合比较器找到最小值。不用自己实现这个,只需让 Java 的流和比较器为您完成繁重的工作:

public String firstPerson() {
    return Arrays.stream(persons)
                 .min(Comparator.comparing(Person::getLastName, 
                                           String.CASE_INSENSITIVE_ORDER)
                                .thenComparing(Person::getFirstName, 
                                               String.CASE_INSENSITIVE_ORDER))
                 .orElse(null);
}

关于java - 这个字符串比较方法有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55130910/

相关文章:

java - 为什么 SSLSocketFactory 缺少 setEnabledCipherSuites?

java - 使用 lucene 创建和查询 n-gram 索引

php - 正则表达式在 PHP 中提取一个 JavaScript 变量

C++:将Strcpy与指针字符串一起使用

java - Java中的更新语句

java - 从单个字符解码 Java 枚举

java - 创建一个数组,其中包含一定范围内的随机值

java - 如何每行显示10个数字? -初学者-

python - 如何使用python获取此字符串

java - 递归计算字符串中的大写字符