У нас есть список объектов доменной области (Person). У объекта Person есть 3 поля:
id, имя, фамилия. Задача: найти дубликаты и создать из них список (или множество, не
важно), остальные объекты отбросить. Дубликатами являются объекты, у которых совпадает
поле имя. Реализовать механизм необходимо через стримы. Решение:
private static Predicate distinctByKey(Function keyExtractor) {
Set
Ответы
Ответ 1
Java для каждой лямбды и ссылки на метод в момент выполнения создаёт прокси-класс,
реализующий функциональный интерфейс. Метод distinctByKey объявлен как принимающий
функциональный интерфейс Function, поэтому при его вызове виртуальная машина создаст
прокси-класс
class Example$$Lambda$1 implements Function {
public String apply(Person person) {
return person.getName();
}
}
и передаст его вместо ссылки на метод Person::getName. Если убрать весь сахар, может
стать понятнее, почему множество seen создаётся один раз. Ваш код в рантайме преобразовывается
в приблизительно эквивалентный этому:
class Example$$Lambda$2 implements Predicate {
private final java.util.Set arg$1;
public boolean test(String name) {
return arg$1.add(name);
}
}
private static Example$$Lambda$2 distinctByKey(Example$$Lambda$1 keyExtractor) {
Set
Комментариев нет:
Отправить комментарий