How to use Comparator in Java to sort

后端 未结 14 1974
时光取名叫无心
时光取名叫无心 2020-11-22 02:19

I learned how to use the comparable but I\'m having difficulty with the Comparator. I am having a error in my code:

Exception in thread \"main\" java.lang.C         


        
14条回答
  •  时光取名叫无心
    2020-11-22 03:11

    Java 8 added a new way of making Comparators that reduces the amount of code you have to write, Comparator.comparing. Also check out Comparator.reversed

    Here's a sample

    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.List;
    
    import static org.junit.Assert.assertTrue;
    
    public class ComparatorTest {
    
        @Test
        public void test() {
            List peopleList = new ArrayList<>();
            peopleList.add(new Person("A", 1000));
            peopleList.add(new Person("B", 1));
            peopleList.add(new Person("C", 50));
            peopleList.add(new Person("Z", 500));
            //sort by name, ascending
            peopleList.sort(Comparator.comparing(Person::getName));
            assertTrue(peopleList.get(0).getName().equals("A"));
            assertTrue(peopleList.get(peopleList.size() - 1).getName().equals("Z"));
            //sort by name, descending
            peopleList.sort(Comparator.comparing(Person::getName).reversed());
            assertTrue(peopleList.get(0).getName().equals("Z"));
            assertTrue(peopleList.get(peopleList.size() - 1).getName().equals("A"));
            //sort by age, ascending
            peopleList.sort(Comparator.comparing(Person::getAge));
            assertTrue(peopleList.get(0).getAge() == 1);
            assertTrue(peopleList.get(peopleList.size() - 1).getAge() == 1000);
            //sort by age, descending
            peopleList.sort(Comparator.comparing(Person::getAge).reversed());
            assertTrue(peopleList.get(0).getAge() == 1000);
            assertTrue(peopleList.get(peopleList.size() - 1).getAge() == 1);
        }
    
        class Person {
    
            String name;
            int age;
    
            Person(String n, int a) {
                name = n;
                age = a;
            }
    
            public String getName() {
                return name;
            }
    
            public int getAge() {
                return age;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public void setAge(int age) {
                this.age = age;
            }
        }
    
    
    
    }
    

提交回复
热议问题