Java 8 với rất nhiều tính năng và cú pháp mới được giới thiệu, trong đó có Lambda Expression được sử dụng để viết anonymous class ngắn gọn hơn. Hiện nay Android Studio 3 đã hỗ trợ cú pháp Java 8 gần như hoàn chỉnh (đã hoàn chỉnh ở API 24) nhưng vì lý do nào đó mà các bạn không thể sử dụng Android Studio 3 thì Retrolambda chính là giải pháp.

Trong RxJava, chúng ta sẽ sử dụng rất nhiều anonymous class và interface như FuncAction

Các bạn có thể xem trang github của project Retrolambda:

Ví dụ nếu sử dụng Retrolambda, đoạn code như sau:

[pastacode lang=”java” manual=”mContentDatabase%0A%20%20%20%20.fetchContentItems(ImmutableSet.of(contentItemId))%0A%20%20%20%20.map(new%20Func1%3CMap%3CContentItemIdentifier%2C%20ContentItem%3E%2C%20ContentItem%3E()%20%7B%0A%20%20%20%20%20%20%20%20%40Override%0A%20%20%20%20%20%20%20%20public%20ContentItem%20call(final%20Map%3CContentItemIdentifier%2C%20ContentItem%3E%20resultSet)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20checkNotNull(resultSet.get(contentItemId))%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D)%0A%20%20%20%20.map(new%20Func1%3CContentItem%2C%20TopicPath%3E()%20%7B%0A%20%20%20%20%20%20%20%20%40Override%0A%20%20%20%20%20%20%20%20public%20TopicPath%20call(final%20ContentItem%20contentItem)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20contentItem.topicPath()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D)%0A%20%20%20%20.subscribe(new%20Action1%3CTopicPath%3E()%20%7B%0A%20%20%20%20%20%20%20%20%40Override%0A%20%20%20%20%20%20%20%20public%20void%20call(final%20TopicPath%20topicPath)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20openContentViewActivity(contentItemId%2C%20topicPath)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D)%3B” message=”Java 7″ highlight=”” provider=”manual”/]

sẽ trở thành:

[pastacode lang=”java” manual=”mContentDatabase%0A%20%20%20%20.fetchContentItems(ImmutableSet.of(contentItemId))%0A%20%20%20%20.map(resultSet%20-%3E%20checkNotNull(resultSet.get(contentItemId)))%0A%20%20%20%20.map(ContentItem%3A%3AtopicPath)%0A%20%20%20%20.subscribe(topicPath%20-%3E%20%7B%0A%20%20%20%20%20%20%20%20openContentViewActivity(contentItemId%2C%20topicPath)%3B%0A%20%20%20%20%7D)%3B” message=”Java 8″ highlight=”” provider=”manual”/]

Ưu điểm rõ ràng nhất là code trở nên ngắn gọn hơn, tập trung một chỗ, bước thực hiện đi từ trên xuống dưới. Nhược điểm ở đây là chỉ hỗ trợ cú pháp chứ không hỗ trợ Java 8 API (ví dụ: class Time mới của Java 8 thay cho Calendar / Date của các bản Java trước đó).