LINUX.ORG.RU

новые коллекции

 


1

2

первое или второе?

for (GrantedAuthority authority : authentication.getAuthorities()) {
    roles.add(authority.getAuthority());
}
roles.addAll(authentication.getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList()));
★★★★☆

Ответ на: комментарий от stevejobs

Тоже в первом варианте. HOF вообще читаются не очень хорошо, а уж в Жабе...

tailgunner ★★★★★
()
Ответ на: комментарий от stevejobs

1 это идиома, воспринимается на автомате.

2 проста для понимания конечно, но если нет каких-то дополнительных причин, лучше заменить её идиомой.

bogus_result
()

ФП - так ФП

roles.addAll(
    authentication.
        getAuthorities().
        stream().
        map(
            GrantedAuthority::getAuthority
        ).
    collect(
        Collectors.toList()
    )
);
E ★★★
()

Второй вариант совершенно нечитаемый, как по мне. Лучше так:

authentication.getAuthorities()
                .stream()
                .map(GrantedAuthority::getAuthority)
                .forEach(roles::add);

f1xmAn ★★★★★
()
Ответ на: комментарий от bogus_result

вопрос в том, что, может быть, для людей привыкших к ФП, второй вариант - точно такая же идиома.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

java

вопрос в том, что, может быть, для людей привыкших к ФП, второй вариант - точно такая же идиома.

Всем пофиг.

anonymous
()
Ответ на: комментарий от anonymous

сейчас в джаве везде будут юзать «ФП» стиль, и через некоторое время всё это станет баяном. Интересно уже сейчас знать, что будет лет через пять, чтобы направлять стопы свои по стопам трендов.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

для людей привыкших к ФП, второй вариант - точно такая же идиома.

Это ты говоришь как человек, привыкший к ФП, или теоретизируешь?

tailgunner ★★★★★
()
Ответ на: комментарий от stevejobs

Не переживай, for всегда останется в тренде.

anonymous
()
Ответ на: комментарий от tailgunner

как человек, начинающий привыкать к ФП. После кложуры, глаза уже адаптировались чтобы видеть такие паттерны. Но до конца трансформация восприятия еще не дошла, и я не совсем понимаю что будет в конце. Хотеть узнать, однако.

Сейчас мне начинает быть больно смотреть на временные переменные. Есть великая заповедь - то чего нет - не сломается. Если есть временная переменная (переменная цикла например) - с ней могут появиться проблемы. В первом варианте у нас цикл, и никуда от переменной цикла не избавишься. Она мозолит глаза и кричит «аааа говнокод!»

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Ну это конечно да. Я думаю так - если сразу новый проект на восьмой джаве, с нуля, то можно попробовать целиком в функциональном стиле.

bogus_result
()
Ответ на: комментарий от stevejobs

так люди могли на других языках/платформах привыкнуть, а потом прийти в джаву

Могли-шмогли. Пока они могли в жабе уже туева куча погромистов была и им один фиг придётся под существующий код переучиваться.

anonymous
()
Ответ на: комментарий от stevejobs

для людей привыкших к ФП, второй вариант - точно такая же идиома.

Это ты говоришь как человек, привыкший к ФП, или теоретизируешь?

как человек, начинающий привыкать к ФП

Еще один юный падаван отправился в крестовый поход.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

Можно писать новые проекты, а не только поддерживать говно мамонта.

Вот недавно совсем стимпанк наблюдал - люди начинают новый ынтерпрайзный проект сразу на 8ке со свежайшим спрингом и прочими костылями, но при этом юзают в качестве фреймворка Wicket (это нечто из каменного века, когда люди делали наскальные рисунки)

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

Мне кажется, что если в коде везде будет так, то все равно. Разбирается легко. Главное не смешивать. А то видишь необычную конструкцию, и думаешь - почему же у автора везде в одном стиле, а здесь в другом?

bogus_result
()
Ответ на: комментарий от stevejobs

Интересно уже сейчас знать, что будет лет через пять

Ты серьезно? На один год прогноз сделать проблематично.

Aswed ★★★★★
()
Ответ на: комментарий от stevejobs

Можно писать новые проекты

Можно-шможно. Жава - императивный язык и всегда им останется. От того, что ты начнёшь городить функциональщину к месту и не к месту читабельности твоему коду не прибавится по определению. Как если ты начнёшь пихать циклы в какую-нибудь кложуру.

anonymous
()
Ответ на: комментарий от tailgunner

Незнание - сила! Чем меньше мы знаем (вынуждены вручную контролировать) о внутренней структуре, тем хуже всё работает. Например, в джаве мы больше вручную не делаем free/delete, и сколько ошибок от этого исчезло. GC, тоже скажешь пафосная чушь?

on unrelated note, вспонилось из Black Art of Software Estimation, что чем больше в методике оценки сроков «ручек управления», тем _обычно_ хуже она работает. Получается что простые способы оценки не менее (если не более!) эффективны, чем сложные.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

GC, тоже скажешь пафосная чушь?

GC - это техника управления памятью; лепет про переменную цикла и «незнание - сила» - пафосная чушь и попытка натянуть сову на глобус.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Уже пару раз спрашивали чо это такое, для молодого поколения разверну

Значит приходит молодой учитель географии в новый класс и пытается вести урок. Ну на него конечно все забили, никто внимания не обращает. Приходит он к директору, жалуется. Тот говорит, детей надо сначала шокировать, а потом заинтересовать, вот смотри, идет в класс и громко спрашивает:
- Братва! А кто может натянуть презерватив на глобус?
Самый смелый с задней парты:
- Слышь, в натуре, а что такое глобус?
Директор:
- Вот с этого мы и начнем наш урок

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от f1xmAn

Ваша запись точно соответствует конструкции 1.

А если конструкцию 2 переписать в императивном стиле, получится не конструкция 1.

bogus_result
()
Ответ на: комментарий от stevejobs

как человек, начинающий привыкать к ФП. После кложуры, глаза уже адаптировались чтобы видеть такие паттерны.

Просто для протокола: ФП - это не соревнование «кто сделает саммый длинный шашлык из функций». ФП - это ссылочная прозрачность, иммутабельность и отсутствие побочных эффектов. Даже вот это:

def addroles(roles, authn):
  return roles + [authr.getAuthority() for authr in authn.getAuthorities()]

и то ближе к ФП - хотя бы переменная не мутируется.

tailgunner ★★★★★
()

Из этих двух вариантов первый читабельней и производительней. Вариант f1xmAn ещё лучше. Только я бы заменил GrantedAuthority::getAuthority на ga -> ga.getAuthority(). Method reference это совершенно нечитаемая штука при джавовской традиции не стесняться в выражениях при наименовании типа.

А вообще в Java получились довольно дурацкие коллекции. Как раз для 99% простых случаев этот stream() и collect() мозолит глаза. Выбросить бы всю JDK и сделать нормальную, с коллекциями и опционалами.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

у меня есть проблемы с циклами, например. Всё программирование бизнес-логики для, например, обработки денег, статистики - это перемалывание списков. Мапы, фильтры, вот это всё. Когда цикл вложен в цикл, вложен в цикл, цикл циклом погоняет, очень легко во всём этом запутаться, перестать понимать смысл происходящего.

а когда это всё асинхронное-многопоточное, начинается полный беспредел. Смешались вместе кони, люди, и залпы тысячи акторов слились в протяжный говнокод.

поэтому мне так важно отсутствие лишних сущностей, которыми надо вручную управлять. Эту проблему надо как-то решать. Может не функциональщиной, по-другому. Но функциональщина тут подходит, а что другое подходит - я не знаю.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от tailgunner

разверни мысль что ли. Да, у меня проблемы с пониманием сложных конструкций. У всех эти проблемы. На предыдущем проекте были методы, переполненные десятками вложенных хитропереплетенных циклов/вызовов/сообщений с мутабельным шаред стейтом, которые никто не знал что делают, и никто не трогал. Потому что они управляют движением денег, и если поправить что-то не понимаючи и посчитается не то, оторвут башку нафиг. На них просто не дышали, на эти методы. Но это ведь совершенно не дело.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

Да, у меня проблемы с пониманием сложных конструкций

У тебя проблемы с пониманием простых вещей, которые тебе говорят. Вместо того, чтобы ответить, ты вываливаешь горячечный брейндамп о каких-то проблемах в каком-то проекте. Такое впечатление, что ты постоянно то ли под кайфом, то ли на стимуляторах.

tailgunner ★★★★★
()
Ответ на: комментарий от stevejobs

вопрос в том, что, может быть, для людей привыкших к ФП, второй вариант - точно такая же идиома.

Второй вариант нифига не похож на ФП: функциональщина обычно лаконична, даже в ЯП где она идёт как сахар. А у тебя какая-то ява блоатварь из мусорных методов с несовсем ясной семантикой.

mashina ★★★★★
()
Ответ на: комментарий от stevejobs

Кстати, есть такая интересная книга, довольно старая но по делу Flow-Based Programming. Автор J. P. Morisson.

Первое издание свободно скачивается в сети. Второе в сети не встречал, зато на амазоне не много стоит. Может вам его посмотреть?

bogus_result
()
Ответ на: комментарий от tailgunner

и то и другое. посоветуй стимуляторов.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)

Если у тебя в одном месте встречается этот код - пиши for. Если постоянно - вынеси for в утилитный метод и пиши

roles.addAll(extractRoles(authentication))

Второй тип записи может иметь профит только для map-reduce но жава, на сколько я знаю, тут не будет параллелить выполнение.

ya-betmen ★★★★★
()

Не выпендривайся, бери первый вариант.

новые коллекции
java

говно

Oxdeadbeef ★★★
()

Фп оно больше про немутабельность и отсутствие сайд эффектов, чем про идиотские попытки упихнуть вычисление в одно выражение, ты ж фанат кложурки вроде, должен понимать азы.

bj
()

первое или второе?

наркоман

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.