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

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

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

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

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

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

Снимок экрана JDK

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

Снимок экрана совместимости источника / цели

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

Solutions Collecting From Web of "Android Studio: lambda не работает"

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

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

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


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

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

… Версия 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 (то есть, как у вас было это до того, как вы перешли на использование лямбда-функций).