Open AlexOreshkevich opened 3 years ago
Tip: use https://www.geeksforgeeks.org/sets-intersection-function-guava-java/ in order to find surnames with 2 or more letters that match what your surname contains.
You can use the following code snippet as well:
Transform your surname as a String into the set of characters:
Set<Character> letters = new HashSet<>();
char[] chars = mySurname.toCharArray();
for (char c : chars) {
letters.add(c);
}
When you will filter on other surname, calculate amount of matches:
surname -> {
char[] currentChars = surname.toCharArray();
int numberOfMatches = 0;
for (char letter : currentChars) {
if (letters.contains(letter)) {
numberOfMatches++;
}
}
return numberOfMatches >= 2;
}
Есть вопрос по пункту 2. Это возможно сделать в непрерывной цепочке? Я не вижу способов, кроме как использовать forEach, но это терминальная операция, которая прерывает pipeline.
Создайте класс Person с полями name, surname, age.
Сгенерируйте группу из 100 рандомных человек в возрасте от 15 до 30.
Для генерации фамилий используйте список нашей группы плюс не менее 5 других фамилий, напр Петров, Сидоров и тд
Напишите ОДНУ НЕПРЕРЫВНУЮ цепочку stream вызовов (pipeline), которая: 1) выбирает объекты, возраст которых меньше 21, и у которых в фамилии встречаются хотя бы 2 буквы, которые есть в вашей фамилии; 2) распечатывает их на экран; 3) сортирует по фамилии, а потом по имени (использовать
thenComparing
у объекта Comparator); 4) берет 4 первых объекта; 5) формирует коллекцию из фамилий объектов; 6) агрегирует все в коллекциюImmutableSet
.Поместите ваш код в функцию в классе и напишите юнит тест, который демонстрирует корректность работы вашей функции.
Tip: для реализации пункта 6 вам нужно будет создать свой коллектор ImmutableSetCollector как показано в примере https://www.baeldung.com/java-8-collectors#Custom
Tip: для корректной работы коллекций типа Set нужно реализовать функции equals() и hashCode() в классе Person.