Advertisement
tripTiPscout

Person OOP

Jan 20th, 2023
802
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.45 KB | None | 0 0
  1.  
  2.           // file App.java
  3.  
  4. package personoop;
  5.  
  6. import java.time.LocalDate;
  7.  
  8. public class App {
  9.         public static void testPerson(Person[] people, LocalDate now) {
  10.         Object[] sortedByAge = Person.sortByAge(people);
  11.         printResult(sortedByAge);
  12.  
  13.         Object[] filteredAndSorted = Person.filterOver18AndSortByLastNameAndAge(people, now);
  14.         printResult(filteredAndSorted);
  15.     }
  16.  
  17.     private static void printResult(Object[] sortedPeople) {
  18.         StringBuilder result = new StringBuilder();
  19.         for (Object person : sortedPeople) {
  20.             result.append(person.toString());
  21.             result.append(",");
  22.         }
  23.         result.deleteCharAt(result.length() - 1);
  24.         System.out.println(result);
  25.     }
  26. }
  27.  
  28.           // file Person.java
  29.  
  30. package personoop;
  31.  
  32. import java.time.LocalDate;
  33. import java.time.Period;
  34. import java.util.Arrays;
  35. import java.util.Collections;
  36. import java.util.Comparator;
  37.  
  38. public class Person {
  39.     private final String id;
  40.     private final LocalDate birthdate;
  41.     private final String firstName;
  42.     private final String lastName;
  43.  
  44.     public Person(String id, LocalDate birthdate, String firstName, String lastName) {
  45.         this.id = id;
  46.         this.birthdate = birthdate;
  47.         this.firstName = firstName;
  48.         this.lastName = lastName;
  49.     }
  50.  
  51.     public String getLastName() {
  52.         return lastName;
  53.     }
  54.  
  55.     public int getAge() {
  56.         Period period = Period.between(this.birthdate, LocalDate.now());
  57.         return period.getYears();
  58.     }
  59.  
  60.     public int getAge(LocalDate date) {
  61.         Period period = Period.between(this.birthdate, date);
  62.         return period.getYears();
  63.     }
  64.  
  65.     public static Object[] sortByAge(Person[] people) {
  66.         return Arrays.stream(people)
  67.                 .sorted(Collections.reverseOrder(Comparator.comparingInt(Person::getAge)))
  68.                 .toArray();
  69.     }
  70.  
  71.     public static Object[] filterOver18AndSortByLastNameAndAge(Person[] people, LocalDate date) {
  72.         return Arrays.stream(people)
  73.                 .filter(person -> person.getAge(date) >= 18)
  74.                 .sorted(Comparator.comparing(Person::getLastName).reversed()
  75.                         .thenComparing(person -> person.getAge(date)).reversed())
  76.                 .toArray();
  77.     }
  78.  
  79.     @Override
  80.     public String toString() {
  81.         return String.format("(%s,%s,%s,%d)",this.id, this.firstName, this.lastName, getAge());
  82.     }
  83. }
  84.  
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement