Yargi

FamilyTree 3/3

Oct 5th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.64 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.stream.Collectors;
  3.  
  4. public class FamilyTree {
  5.  
  6.     private final List<Person> persons = new ArrayList<>();
  7.     private final Map<String, List<String>> parentsAndChildren = new LinkedHashMap<>();
  8.  
  9.     public void addPerson(String name, String birthDate){
  10.         persons.add(new Person(name, birthDate));
  11.     }
  12.  
  13.     public void addIDs(String parentID, String childID){
  14.         parentsAndChildren.putIfAbsent(parentID, new ArrayList<>());
  15.         parentsAndChildren.get(parentID).add(childID);
  16.     }
  17.  
  18.     public void buildRelations(){
  19.         parentsAndChildren.forEach((parentID, children) -> {
  20.             Person parent = getPerson(parentID);
  21.             children.stream().map(this::getPerson).forEach(parent::addChild);
  22.         });
  23.     }
  24.  
  25.     public Person getPerson(String personID){
  26.         return persons.stream().filter(person -> person.getName().equals(personID) || person.getBirthDate().equals(personID)).findFirst().orElseThrow();
  27.     }
  28.  
  29.     public String getFamilyTreeFor(Person person){
  30.         return new StringBuilder().append(person.toString()).append(System.lineSeparator())
  31.                 .append("Parents:").append(System.lineSeparator())
  32.                 .append(person.getParents().stream().map(Person::toString).collect(Collectors.joining(System.lineSeparator())))
  33.                 .append(person.getParents().isEmpty() ? "" : System.lineSeparator())
  34.                 .append("Children:").append(System.lineSeparator())
  35.                 .append(person.getChildren().stream().map(Person::toString).collect(Collectors.joining(System.lineSeparator())))
  36.                 .toString();
  37.     }
  38. }
  39.  
Advertisement
Add Comment
Please, Sign In to add comment