Android Studio: lambda не работает

При попытке использовать лямбда-выражения я получил несколько ошибок сборки Gradle:

Ошибка: (41, 100) ошибка: лямбда-выражения не поддерживаются в-источнике 1.7 (используйте "источник 8" или выше, чтобы включить лямбда-выражения)

Ошибка: выполнение выполнено для задачи ': app: compileDebugJava'. Ошибка компиляции; для получения подробной информации см. вывод ошибки компилятора.

Быстрый поиск помог мне понять, что лямбда-выражения поддерживаются только в JDK 1.8, и, видимо, я его не использую.

Моя проблема в том, что JDK 1.8 устанавливает на моем компьютере (я использую Yosemite), в настройках модуля → Местоположение SDK → JDK Location:

JDK location screenshot

Но в модуле настроек → приложение → Совместимость с исходными/целевыми объектами отсутствует опция, например "1.8", есть только опции для Java 1.6 или 1.7.

Source/Target Compatibility screenshot

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

Ответ 1

Обновление: 19 июня 2017 года

Джек теперь устарел, и поддержка Java 8 будет интегрирована в текущие инструменты в будущем. Из этого сообщения в блоге Будущая поддержка функций Java 8 Language на Android:

Мы решили добавить поддержку языковых функций Java 8 непосредственно в текущий набор инструментов javac и dx, а также отказаться от инструментальной привязки Jack. В этом новом направлении существующие инструменты и плагины, зависящие от формата файла классов Java, должны продолжать работать. Двигаясь вперед, функции языка Java 8 будут поддерживаться системой Android. Мы собираемся запустить это как часть Android Studio в ближайшие недели, и мы хотели бы поделиться этим решением с вами на ранней стадии.


Обновление: 26 апреля 2016 года

Новая версия Android Studio (2.1) поддерживает функции Java 8. Вот выдержка из сообщение для разработчиков блогов Android разработчиков:

... В выпуске Android Studio 2.1 есть поддержка нового компилятора Jack и поддержка Java 8.

С помощью компилятора Jack, lambdas, ссылки на методы, аннотации типа времени компиляции, типы пересечений и вывод типа доступны на всех версиях платформы Android. Стандартные и статические методы и повторяемые аннотации доступны на Android N и выше.

Чтобы использовать возможности языка Java 8 при разработке с помощью N Developer Preview, вам нужно использовать компилятор Jack. Мастер создания проекта [Файл → Новый → Проект] генерирует правильные конфигурации для проектов, ориентированных на N.


Предыдущий ответ:

Android еще не поддерживает Java 1.8 (он поддерживает только до 1.7), поэтому вы не можете использовать lambdas (как один из комментариев, упомянутых выше).

Этот ответ дает более подробную информацию об совместимости Android Studio; он утверждает:

Если вы хотите использовать lambdas, одну из основных функций Java 8 в Android, вы можете использовать gradle -retrolamba

Если вы хотите больше узнать об использовании gradle-retrolambda, этот ответ дает много подробностей об этом.

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