以相同的方式对两个列表进行排序

时间:2018-01-18 17:16:54

标签: java arrays sorting

好的,所以我有2个输入参数:

String[] Names = {"Martin", "Josef", "John", "Jessica", "Claire"};
int[] Age = {22, 19, 20, 17, 21};

我想要的输出是一个如下所示的列表:

String[] Names = {"Jessica", "Josef", "John", "Claire", "Martin"};
int[] Age = {17, 19, 20, 21, 22};

所以我做了一些研究,发现你可以用数组列表和集合对年龄列表进行排序,但是由于我还需要链接到它的名称,所以没有任何用处。

我希望你们中的任何人能帮助我:)

2 个答案:

答案 0 :(得分:2)

理想的解决方案是创建一个包含两个字段Personname的{​​{1}}类,从而在保持相关数据和维护时更加轻松。

一旦用必要的字段,构造函数和getter构造了类,那么你可以启动许多需要用必要的数据填充它的对象并将其存储到数组或列表中。

班级的例子:

age

一组人物,虽然您也可以使用列表:

public class Person {
     private String name;
     private int age;

     @Override
     public String toString() {
         return "Person{" +
                 "name='" + name + '\'' +
                 ", age=" + age +
                 '}';
     }

     public Person(String name, int age) {
        this.name = name;
        this.age = age;
     }

     public String getName() {
        return name;
     }

     public int getAge() {
        return age;
     }
}

现在您可以按年龄排序并维护相关数据,如下所示:

Person[] people = new Person[]{
        new Person("Martin", 22),
        new Person("Josef", 19),
        new Person("John", 20),
        new Person("Jessica", 17),
        new Person("Claire", 21)
};

答案 1 :(得分:0)

为持有年龄和名称的Person创建一个类,将all放在一个有序集合中并创建一个自定义comperator

public class F {
    public static void main(String[] args) {
        SortedSet<Person> people = new TreeSet<Person>((o1, o2) -> o1.getAge() - o2.getAge());
        people.add(new Person("foo", 3));
        people.add(new Person("bar", 2));

        System.out.println(people);
    }

    private static class Person {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        @Override
        public String toString() {
            return MoreObjects.toStringHelper(this)
                    .add("name", name)
                    .add("age", age)
                    .toString();
        }
    }
}