Сортировать данные из класса и массива - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь добавить данные из класса в arraylist, затем объединить их, и у меня возник вопрос. Как я могу подключить данные из многих arraylist, чтобы показать их после сортировки? Мне нужно напечатать имя, фамилию и возраст в одной строке после сортировки по данным из одного массива. Есть ли лучший способ добавить данные из класса в arraylist?

Main:

package mergesort_main;
import java.util.ArrayList;

public class MergeSort_main {

    static ArrayList name = new ArrayList<>();
    static ArrayList lastName = new ArrayList<>();
    static ArrayList age = new ArrayList<>();

    public static void main(String[] args)  {        
        User User1 = new User("usernameA", "lastNameA", 28);
        User User2 = new User("usernameB", "lastNameB", 53);
        User User3 = new User("usernameC", "lastNameC", 33);

        name.add(User1.getName());
        lastName.add(User1.getLastName());
        age.add(User1.getAge());
        name.add(User2.getName());
        lastName.add(User2.getLastName());
        age.add(User2.getAge());
        name.add(User3.getName());
        lastName.add(User3.getLastName());
        age.add(User3.getAge());

        System.out.println("Sorted by: name");
        System.out.println("*************************************");
        MergeSort test = new MergeSort(name);
        test.sort();
        test.show();
        System.out.println("*************************************\n\n");

        System.out.println("Sorted by: lastname");
        System.out.println("*************************************");
        MergeSort test = new MergeSort(name);
        test.sort();
        test.show();
        System.out.println("*************************************/n/n");

        /*System.out.println("Sorted by: age");
        System.out.println("*************************************");
        MergeSort test = new MergeSort(age);
        test.sort();
        test.show();
        System.out.println("*************************************");*/
    }
}

Mergesort:

package mergesort_main;
import java.util.ArrayList;
import static mergesort_main.MergeSort_main.age;
import static mergesort_main.MergeSort_main.lastName;
public class MergeSort {

    private ArrayList strList;
    public MergeSort(ArrayList<String> input) {
        strList = input;
    }

    public void sort() {
        strList = mergeSort(strList);
    }

    ArrayList<String> mergeSort(ArrayList<String> whole) {
        ArrayList<String> left = new ArrayList<>();
        ArrayList<String> right = new ArrayList<>();
        int center;

        if (whole.size() == 1) {    
            return whole;
        } else {
            center = whole.size() / 2;
            for (int i = 0; i < center; i++) {
                left.add(whole.get(i));
            }
            for (int i = center; i < whole.size(); i++) {
                right.add(whole.get(i));
            }
            left  = mergeSort(left);
            right = mergeSort(right);
            merge(left, right, whole);
        }
        return whole;
    }

    private void merge(ArrayList<String> left, ArrayList<String> right, ArrayList<String> whole) {
        int leftIndex = 0;
        int rightIndex = 0;
        int wholeIndex = 0;
        while (leftIndex < left.size() && rightIndex < right.size()) {
            if ((left.get(leftIndex).compareTo(right.get(rightIndex))) < 0) {
                whole.set(wholeIndex, left.get(leftIndex));
                leftIndex++;
            } else {
                whole.set(wholeIndex, right.get(rightIndex));
                rightIndex++;
            }
            wholeIndex++;
        }

        ArrayList<String> rest;
        int restIndex;
        if (leftIndex >= left.size()) {
            rest = right;
            restIndex = rightIndex;
        } else {
            rest = left;
            restIndex = leftIndex;
        }

        for (int i = restIndex; i < rest.size(); i++) {
            whole.set(wholeIndex, rest.get(i));
            wholeIndex++;
        }
    }

    public void show() {
        System.out.println("Name:         Lastname:     Age:");
        for (int i = 0; i < strList.size(); i++) {
            System.out.println(strList.get(i) + "     " + lastName.get(i) + "     " + age.get(i));
        }
    }
}

Class:

package mergesort_main;

public class User {
    public String name = null;
    public String lastName = null;
    public Integer age = 0;

    User(String name, String lastName, int age) {
        this.name = name;
        this.lastName = lastName;
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() { return this.name; }
    public String getLastName() { return this.lastName; }
    public int getAge() { return this.age; }
}
...