Реализация с внешним сравнением

import java.util.Collections;
import java.util.ArrayList;
import java.util.Comparator;

class Person 
{
   protected String name;
   protected int age;
   public Person (String name, int age) {
      this.name=name;
      this.age=age;
   }
  @Override
   public String toString() {
      return "["+name+","+age+"]";
   }
}

public class Main 
{
    public static void main(String[] args) {
        ArrayList<Person> group=new ArrayList<>();
        group.add(new Person("Вася",30));
        group.add(new Person("Соня",23));
    group.add(new Person("Женя",28));
    group.add(new Person("Вася",28));

    Comparator<Person> myComp=new Comparator<Person>() {
      @Override
      public int compare(Person p1,Person p2) {
          int result=p1.name.compareTo(p2.name);
          if(result!=0)
            return result;
          result=p1.age-p2.age;
          return result;
      }
    };
      Comparator<Person> myComp2=new Comparator<Person>() {
      @Override
      public int compare(Person p1,Person p2) {
          int result=p1.name.compareTo(p2.name);
          if(result!=0)
            return result;
          result=p1.age-p2.age;
          return result;
      }
    };
    group.sort(myComp);

    for(Person p: group)
        System.out.println(p);
    }
}