Легко ли читается method reference вместо lambda?
От: vsb Казахстан  
Дата: 14.09.22 22:23
Оценка:
Меня очень раздражает синтаксис method reference (где ::). Я решительно не понимаю, зачем он нужен и на мой взгляд он ухудшает читаемость кода. Хотелось бы услышать стороннее мнение. Приведу несколько фрагментов кода.

    appointmentRepository.queryByIds(appointmentIds).stream()
        .filter(Objects::nonNull)

    appointmentRepository.queryByIds(appointmentIds).stream()
        .filter(appointment -> nonNull(appointment))

    appointmentRepository.queryByIds(appointmentIds).stream()
        .filter(appointment -> appointment != null)
`

    Set<String> acceptedIins = response.stream()
        .map(SomeApiClient.AddReferrersResponseItem::getIin)
        .collect(toSet());

    Set<String> acceptedIins = response.stream()
        .map(responseItem -> responseItem.getIin())
        .collect(toSet());


Я предполагаю, что method reference может компилироваться в незначительно более быстрый код, но уверен, что разница неизмерима на практике.
Отредактировано 14.09.2022 22:23 vsb . Предыдущая версия .
Re: Легко ли читается method reference вместо lambda?
От: GarryIV  
Дата: 15.09.22 05:34
Оценка: -1 :)
Здравствуйте, vsb, Вы писали:

vsb>Меня очень раздражает синтаксис method reference (где ::). Я решительно не понимаю, зачем он нужен и на мой взгляд он ухудшает читаемость кода. Хотелось бы услышать стороннее мнение. Приведу несколько фрагментов кода.

Выглядит не очень, согласен. Но почему-то идея с настройками по умолчанию предпочитает method reference.

vsb>Я предполагаю, что method reference может компилироваться в незначительно более быстрый код, но уверен, что разница неизмерима на практике.

Чет у меня сомнения что какая-то разница будет. Проверять влом.
WBR, Igor Evgrafov
Re: Легко ли читается method reference вместо lambda?
От: Micht  
Дата: 15.09.22 08:43
Оценка: +1 -1 :)
Здравствуйте, vsb, Вы писали:

vsb>...


Не знаю, прекрасно читается. и главное, кратко пишется.
Re: Легко ли читается method reference вместо lambda?
От: StanislavK Великобритания  
Дата: 28.09.22 08:29
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Меня очень раздражает синтаксис method reference (где ::). Я решительно не понимаю, зачем он нужен и на мой взгляд он ухудшает читаемость кода. Хотелось бы услышать стороннее мнение. Приведу несколько фрагментов кода.

Получается сильно компактнее, когда есть параметры.

    public static void sample() {
        fooConsumer(Bar::intConsumer);
    }
    
    interface Foo {
        void foo(int i1, int i2, int i3, int i4);
    }
    
    public static void fooConsumer(Foo foo) {
        
    }
    
    public static void intConsumer(int i1, int i2, int i3, int i4) {
        
    }


vsb>Я предполагаю, что method reference может компилироваться в незначительно более быстрый код, но уверен, что разница неизмерима на практике.

Как и многое в java — это зависит от ситуации. Например в этом случае компилятор может точно определить, что не нужно на каждый вызов создавать лямбду.
Re: Легко ли читается method reference вместо lambda?
От: σ  
Дата: 28.09.22 11:05
Оценка:
vsb>Меня очень раздражает синтаксис method reference (где ::). Я решительно не понимаю, зачем он нужен

Ради принципа Don't DRY yourself.
Re: Легко ли читается method reference вместо lambda?
От: · Великобритания  
Дата: 28.09.22 12:08
Оценка:
Здравствуйте, vsb, Вы писали:

vsb> Меня очень раздражает синтаксис method reference (где ::). Я решительно не понимаю, зачем он нужен и на мой взгляд он ухудшает читаемость кода. Хотелось бы услышать стороннее мнение. Приведу несколько фрагментов кода.


vsb> .filter(appointment -> nonNull(appointment))

Вот это отвратительно. Не знаю почему такое спросом пользуется. Открываем javadoc, читаем: API Note: This method exists to be used as a Predicate, filter(Objects::nonNull).

vsb> .map(responseItem -> responseItem.getIin())

я обычно сокращаю: .map(v -> v.getIin()) тогда имеет смысл.

vsb> Я предполагаю, что method reference может компилироваться в незначительно более быстрый код, но уверен, что разница неизмерима на практике.

Да, похоже на правду. Для лямбды будет сгенерирован синтетический метод, а ссылка на метод будет использовать существующий.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.