С полным уважением к Java лямбда-функции и намерениям o разработчикам я хотел бы спросить: что нового и почему это лучше, чем традиционный подход к функции интерфейса/метода? Почему это лучше, чем (допустим) forEach(IApply)
где:
IApply
является интерфейс
public interface IApply {
void exec(KEY key, VALUE value);
}
Как это мешает к параллельности? По крайней мере реализация IApply может быть повторно использована, унаследована (расширена), реализована в статическом классе.
Последний аргумент важен после десятков примеров ошибок юниоров, которые я видел, которые пропускают этот лямбда-код, обращаясь к этому из внешнего класса, может быть причиной того, что класс остается в памяти после того, как отдельная ссылка на него уже нулевая.
С этой точки зрения важны ссылки на статические члены класса (являются аналогами случая C# «делегат»). И главным образом - из одной руки - лямбда - это суперкапсуляция, из другой, которая не может многократно использоваться, и одновременно - нарушение основных принципов культуры OOD: свободный доступ к членам магистров. С точки зрения культуры программирования - обратный к 70-м годам прошлого века.
Функциональное программирование? - Вижу, но зачем смешивать явления ООП что Java.OOD имеет замечательный образец с разделителем Data-Behavior, который элегантно предоставляет те же возможности? Аргумент - это то же самое, что и в Java Script ... nu, действительно! Поэтому дайте инструменты для встраивания Java Script в Java и записи кусков системы в Java Script. Поэтому я до сих пор не вижу действительно настоящих преимуществ, так как есть волна рекламы.
http://www.lambdafaq.org/why-are-lambda-expressions-being-added-to-java/ "* Преимущество этого изменения заключается в том, что коллекции теперь могут самостоятельно организовывать собственную итерацию, перенося ответственность для параллелизации из клиентского кода в библиотечный код. * « – assylias