Search code examples
javaarraysstringmethodsbubble-sort

sort by : high to low sort by: low to high


Using this How to do When I put high to low or low to high it will arrange ?

String [][]Data={{"Eugine","8"},{"Ben","9"},{"John","19"},{"Jairus","5"},{"Sofia","13"}};

OUTPUT sort by : high to low John",19 Sofia,13 Ben",9 Eugine,8 Jairus,5 sort by : low to high Jairus,5 Eugine,8 Ben,9 Sofia,13 John,19


//This is just my noob code// //please help//
 String [][] Data={{"Eugine","8"},{"Ben","9"},{"John","19"},{"Jairus","5"},{"Sofia","13"}};
            Arrays.sort(people);
            for(Person p : people)
                System.out.println(p.name + ", " + p.age);
        }
    }

    class Person implements Comparable<Person>{
        public final String name;
        public final int age;[enter image description here][1]
        public Person(String name, int age){
            this.name = name;
            this.age = age;
        }
        @Override
        public int compareTo(Person person) {
            return age - person.age;
        }

Solution

  • Since you are trying to sort in different ways, you need to use Comparator.

    Some of the ways in which you can do it are as follows:

    [By creating and using separate comparators]

    import java.util.Arrays;
    import java.util.Comparator;
    
    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 name + " age " + age;
        }
    }
    
    class LowToHighComparator implements Comparator<Person> {
    
        @Override
        public int compare(Person p1, Person p2) {
            return Integer.compare(p1.getAge(), p2.getAge());
        }
    }
    
    class HighToLowComparator implements Comparator<Person> {
    
        @Override
        public int compare(Person p1, Person p2) {
            return Integer.compare(p2.getAge(), p1.getAge());
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Person[] people = { new Person("Eugine", 8), new Person("Ben", 9), new Person("John", 19),
                    new Person("Jairus", 5), new Person("Sofia", 13) };
    
            Person[] lowToHigh = people.clone();
            Person[] highToLow = people.clone();
    
            Arrays.sort(lowToHigh, new LowToHighComparator());
            Arrays.sort(highToLow, new HighToLowComparator());
    
            System.out.println("Unsorted: ");
            Arrays.stream(people).forEach(System.out::println);
            System.out.println();
    
            System.out.println("Low to high: ");
            Arrays.stream(lowToHigh).forEach(System.out::println);
            System.out.println();
    
            System.out.println("High to low: ");
            Arrays.stream(highToLow).forEach(System.out::println);
        }
    }
    

    Output:

    Unsorted: 
    Eugine age 8
    Ben age 9
    John age 19
    Jairus age 5
    Sofia age 13
    
    Low to high: 
    Jairus age 5
    Eugine age 8
    Ben age 9
    Sofia age 13
    John age 19
    
    High to low: 
    John age 19
    Sofia age 13
    Ben age 9
    Eugine age 8
    Jairus age 5
    

    [By using Comparator.comparing]

    import java.util.Arrays;
    import java.util.Comparator;
    
    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 name + " age " + age;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Person[] people = { new Person("Eugine", 8), new Person("Ben", 9), new Person("John", 19),
                    new Person("Jairus", 5), new Person("Sofia", 13) };
    
            Person[] lowToHigh = people.clone();
            Person[] highToLow = people.clone();
    
            Arrays.sort(lowToHigh, Comparator.comparing(Person::getAge));
            Arrays.sort(highToLow, Comparator.comparing(Person::getAge).reversed());
    
            System.out.println("Unsorted: ");
            Arrays.stream(people).forEach(System.out::println);
            System.out.println();
    
            System.out.println("Low to high: ");
            Arrays.stream(lowToHigh).forEach(System.out::println);
            System.out.println();
    
            System.out.println("High to low: ");
            Arrays.stream(highToLow).forEach(System.out::println);
        }
    }
    

    Output:

    Unsorted: 
    Eugine age 8
    Ben age 9
    John age 19
    Jairus age 5
    Sofia age 13
    
    Low to high: 
    Jairus age 5
    Eugine age 8
    Ben age 9
    Sofia age 13
    John age 19
    
    High to low: 
    John age 19
    Sofia age 13
    Ben age 9
    Eugine age 8
    Jairus age 5