#275 Фильтрация и сортировка персон и детей

Компании:
Сбербанк
Темы:
JavaStream API и LambdaПрактика

Дан класс:

import java.util.List;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) {
        var personList = init();
        printList(personList);

    }

        private static void printList(List list) {
        System.out.println(list.stream()
            .map(Object::toString)
            .collect(Collectors.joining("\n")));
    }

        private static List<Person> init() {
        return List.of(
            new Main.Person("Алексей", List.of(
                new Main.Child("Альбина", 3),
                new Child("Арсений", 8),
                new Child("Александр", 15))),
            new Main.Person("Григорий", List.of()),
            new Main.Person("Дмитрий", List.of(
                new Main.Child("Дарья", 1),
                new Child("Даниил", 5))),
            new Main.Person("Борис", List.of(
                new Main.Child("Богдан", 9))),
            new Main.Person("Виктория", List.of(
                new Main.Child("Владимир", 4),
                new Child("Варвара", 7),
                new Child("Валерия", 12))),
            new Main.Person("Елена", List.of(
                new Main.Child("Евгений", 11))));
    }

    public static class Child {

        private String name;
        private Integer age;

        Child(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public Integer getAge() {
            return age;
        }

        @Override
        public String toString() {
            return name + " - " + age;
        }

    }

    public static class Person {

        private String name;
        private List<Child> children;

        Person(String name, List<Child> children) {
            this.name = name;
            this.children = children;
        }

        public String getName() {
            return name;
        }

        public List<Child> getChildren() {
            return children;
        }

        @Override
        public String toString() {
            return name + ": " +
                children.stream()
                    .map(Object::toString)
                    .collect(Collectors.joining(", "));
        }
    }
}

Необходимо выполнить несколько операций над списком List<Person>:

  • удалить персон, у которых меньше двух детей;
  • отсортировать персон по возрасту самого младшего ребенка;
  • получить общий список детей List<Child>;
  • отсортировать детей по имени и возрасту.

Разбор вопроса

Ментор
Ответь как на реальном собеседовании. Я задам уточняющие вопросы, а затем сравню твой ответ с эталонным и покажу точность в %.
Войди, чтобы начать диалог Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти