Исправление правильного хранения данных без повторения - PullRequest
0 голосов
/ 12 апреля 2020

Я работал с данными из файла и держал их в паре вместе. Мне нужно отсортировать данные в алфавитном порядке, сохраняя их в паре одновременно. Вот мой текстовый файл:

Joe
Jake
Toronto
32
joejake@gmail.com
Bob
Barley
Vancouver
13
bobbarley@gmail.com
Felix
Fixed
Boston
24
felixfixed@gmail.com

Вот что мне нужно для вывода:

First Name:
Bob
Last Name:
Barley
City:
Vancouver
Age:
13
Email:
bobbarley@gmail.com
First Name:
Felix
Last Name:
Fixed
City:
Boston
Age:
24
Email:
felixfixed@gmail.com
First Name:
Joe
Last Name:
Jake
City:
Toronto
Age:
32
Email:
joejake@gmail.com

В идеале, когда я сортирую их, имя и фамилия и т. Д. c. будет правильно соединен Однако то, что у меня есть в настоящее время, приводит к таким выводам:

First Name:
Bob
Last Name:
Barley
City:
Vancouver
Age:
13
Email:
bobbarley@gmail.com
First Name:
Felix
Last Name:
Fixed
City:
Boston
Age:
24
Email:
felixfixed@gmail.com
First Name:
Joe
Last Name:
Fixed
City:
Boston
Age:
24
Email:
felixfixed@gmail.com

Вот код, который я написал:

public static void insertfname (String fname [], String lname [], String city [], String age [], String email []) throws IOException
{
    int howMany = 0;
    int count = count (howMany);

    for (int i = 1; i < count; i++)
    {
        String current = fname [i];
        String current2 = lname [i];
        String current3 = city [i];
        String current4 = age [i];
        String current5 = email [i];
        int j = i - 1;
        //Insertion sort and keeping records together
        while (j >= 0 && current.compareToIgnoreCase (fname [j]) < 0)
        {
            fname [j + 1] = fname [j];
            j--;
        }
        fname [j + 1] = current;

        while (j >= 0 && current.compareToIgnoreCase (fname [j]) < 0)
        {
            lname [j + 1] = lname [j];
            j--;
        }
        lname [j + 1] = current2;

        while (j >= 0 && current.compareToIgnoreCase (fname [j]) < 0)
        {
            city [j + 1] = city [j];
            j--;
        }
        city [j + 1] = current3;

        while (j >= 0 && current.compareToIgnoreCase (fname [j]) < 0)
        {
            age [j + 1] = age [j];
            j--;
        }
        age [j + 1] = current4;

        while (j >= 0 && current.compareToIgnoreCase (fname [j]) < 0)
        {
            email [j + 1] = email [j];
            j--;
        }
        email [j + 1] = current5;
    }
}

1 Ответ

0 голосов
/ 12 апреля 2020

Михир Кеккар прав, это всего лишь пример;

Определите класс контакта,

class ContactData implements Comparable<ContactData>

Переопределите метод CompareTo для сортировки

public int compareTo(ContactData other)

Создайте массив контактов и отсортируйте его с помощью

Arrays.sort(yourOwnContactArray);

При этом используется переопределенный метод compareTo. Хотя у вас есть метод сортировки по умолчанию, вы можете использовать другие методы для сортировки, такие как:

List<ContactData> listContacts = make-your-own ...

, а затем использовать Collections.sort с другим / другим Comparator

`Collections.sort(listContacts, (a,b) -> {
   return a.lastName.concat(a.name).compareTo(b.lastName.concat(b.name));
 });`
...