Встреча сообщества Java-разработчиков с ведущими инженерами Oracle
Крок заманивает молодые неокрепшие умы, зомбирует их и заставляет работать бесплатно целую вечность.... Уаааахахаха!
Зато рассказали об особых
Lambda1 l1 = -> system.out.println("lambda");
Lambda2 l2 = -> system.out.println("lambda");
//Ok
Lambda1 l1 = -> system.out.println("lambda");
Lambda2 l2 = l1;
//COMPILE ERROR
Или вот так
Lambda1 l1 = i -> "" + i; //int -> String
Lambda2 l2 = Double::parseDouble //String -> double
Lambda3 l3 = l1 -> l2 //int -> double
///COMPILE ERROR
А надо делать как-то так:
list.asStream.map(l1).map(l2).insert(new ArrayList
ну и вообще
ну или по теме лекции
I want use lambda in Java.
Now I have a LambdaMetaFactory to create LambdaFactory to create Lambda
пруфпик:
I want use lambda in Java.ппц. Если хочешь много-много лямбд в Java - юзай clojure
Now I have a LambdaMetaFactory to create LambdaFactory to create Lambda
Now I have a LambdaMetaFactory to create LambdaFactory to create Lambdaэто же деталь реализации.
В целом, какая разница как оно устроено внутри?
последнее, очевидно, шутка. А вот остальное - это суровая правда реализации лямбд в 8-ке, где просто получился неполноценный синтаксический сахар и поддерживающие его коллекции
ппц. Если хочешь много-много лямбд в Java - юзай Scheme
Зачем они вообще нужны? Польза КРАЙНЕ сомнительна, а вред очевиден. Какое-то время назад Шурик тут постил код, обильно уснащенный лямбдами. При всем уважении к Шурику, я бы с таким кодом встретиться не хотел.
lambda = "True"::compateToIgnoreCase;Скоро у всех индусов мира!
Assert.assertEquals(0, lambda.apply("TRue";
Assert.assertEquals(-1, lambda.apply("fALSe";
Зачем они вообще нужны? Польза КРАЙНЕ сомнительна, а вред очевиден.Чего именно польза сомнительна? Лямбд? Так не надо знакомиться с ними через идиотские реализации.
Зачем они вообще нужны?... строго спросили у Хаскеля Курри в деканате. — Занялись бы лучше чем-нибудь стоящим, практичным!
Он курил и вспоминал, как тридцать лет назад на этот же самый вопрос отвечал Тьюринг.
Какое-то время назад Шурик тут постил код, обильно уснащенный лямбдами.У него в коде уже не лямбды, у него expression-ы. И код у него страшно выглядит, потому что в C# expression можно записать только через лямбду.
ps
так-то обычно лямбды используются, чтобы удобно записать операции над коллекциями
var enemyTanks = world.Tanks.Where(_tank => !_tank.IsTeammate)
.Where(_tank => _tank.HullDurability > 0 && _tank.CrewHealth > 0)
.ToArray;
var tank = enemyTanks
.OrderByDescending(_tank => Math.Abs(self.GetTurretAngleTo(_tank < self.TurretTurnSpeed * self.RemainingReloadingTime)
.ThenBy(_tank => self.GetDistanceTo(_tank
.FirstOrDefault;
без лямбд тоже самое записывается много грустнее.
без лямбд тоже самое записывается много грустнее.
У грустного варианта есть свои преимущества:
1)Сразу видно, где создаются временные коллекции, а где все делается на лету. В твоем примере не очень понятно, то ли там на каждый элемент в цепочке энергично вычисляется коллекция, то ли какие-то ленивые обертки генерятся. Если генерятся ленивые обертки, то не очень ясно, что произойдет при попытке сериализовать какой-нибудь объект, в котором вместо реального списка обертка.
2)Непонятно как вставить отладочную печать, особенно с учетом возможной ленивости.
Оставить комментарий
tisnotij
В четверг, 13 декабря, в московском офисе компании КРОК пройдет первая встреча московского сообщества Java-разработчиков с ведущими инженерами компании Oracle Сергеем Куксенко и Алексеем Шипилёвым и ведущим инженером компании КРОК Геннадием Кругловым. Встреча пройдет в формате семинара, живые обсуждения и вопросы к докладчикам приветствуются.Подробности и регистрация тут:
http://jugmsk.timepad.ru/event/51780/
P.S. Мопед не мой, в том смысле, что не располагаю какой-либо информацией помимо изложенной на сайте.