Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.stream.Collectors;
- public class FamilyTree {
- private final List<Person> persons = new ArrayList<>();
- private final Map<String, List<String>> parentsAndChildren = new LinkedHashMap<>();
- public void addPerson(String name, String birthDate){
- persons.add(new Person(name, birthDate));
- }
- public void addIDs(String parentID, String childID){
- parentsAndChildren.putIfAbsent(parentID, new ArrayList<>());
- parentsAndChildren.get(parentID).add(childID);
- }
- public void buildRelations(){
- parentsAndChildren.forEach((parentID, children) -> {
- Person parent = getPerson(parentID);
- children.stream().map(this::getPerson).forEach(parent::addChild);
- });
- }
- public Person getPerson(String personID){
- return persons.stream().filter(person -> person.getName().equals(personID) || person.getBirthDate().equals(personID)).findFirst().orElseThrow();
- }
- public String getFamilyTreeFor(Person person){
- return new StringBuilder().append(person.toString()).append(System.lineSeparator())
- .append("Parents:").append(System.lineSeparator())
- .append(person.getParents().stream().map(Person::toString).collect(Collectors.joining(System.lineSeparator())))
- .append(person.getParents().isEmpty() ? "" : System.lineSeparator())
- .append("Children:").append(System.lineSeparator())
- .append(person.getChildren().stream().map(Person::toString).collect(Collectors.joining(System.lineSeparator())))
- .toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment