- Баллы
- 143
- Имя в Minecraft
- gamerforEA_MCPC
Грубо говоря, лямбда - сокращённый вариант анонимных классов. Чаще всего используется для того, чтобы позволить чужому коду выполнять нужные нам действия, а не делать всё самостоятельно (хотя есть и другие применения).
Стандартный подход: "Дай мне данные, а я что-то с ними сделаю"
Подход с лямбдами: "Сделай это со своими данными"
Пример убийства мобов в Bukkit:
В данном случае метод forEach принимает на вход обыкновенный Consumer, который может быть чем угодно (лямбдой, анонимным классом, обычным классом), и выполняет метод Consumer.accept() (у нас он вызывает метод Entity.remove()) для каждого элемента.
Эти 4 варианта одинаковы:
Стандартный подход: "Дай мне данные, а я что-то с ними сделаю"
Подход с лямбдами: "Сделай это со своими данными"
Пример убийства мобов в Bukkit:
Java:
// Убиваем мобов сами
for (Entity entity : world.getEntities())
entity.remove();
// Говорим, что нужно убить мобов
world.getEntities().forEach(Entity::remove);
В данном случае метод forEach принимает на вход обыкновенный Consumer, который может быть чем угодно (лямбдой, анонимным классом, обычным классом), и выполняет метод Consumer.accept() (у нас он вызывает метод Entity.remove()) для каждого элемента.
Эти 4 варианта одинаковы:
Java:
Consumer<Entity> c1 = Entity::remove;
Consumer<Entity> c2 = entity -> entity.remove();
Consumer<Entity> c3 = entity -> {
entity.remove();
};
Consumer<Entity> c4 = new Consumer<Entity>() {
@Override
public void accept(Entity entity) {
entity.remove();
}
};
Последнее редактирование: