проблема с этим методом сравнения строк - PullRequest
1 голос
/ 13 марта 2019

Следующий метод должен вернуть имя человека, который имеет первую фамилию в словаре.в случае одинаковых фамилий метод будет сравнивать имена первых лиц и определять, кто из них имеет имя в соответствии со словарем.например: данные имена: «дан», «кокос», «скалистый».имя «кокос» будет возвращено, потому что «с» перед «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;
    }

Я думаю, что это решение, но по какой-то причине метод всегда возвращает меня последним человеком в массиве, а не тем, который мне нужен.

1 Ответ

1 голос
/ 13 марта 2019

По сути, вы пытаетесь найти минимальное значение с помощью составного компаратора. Вместо того, чтобы реализовывать это самостоятельно, просто позвольте потокам и компараторам 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);
}
...