Angelika Langer - Training & Consulting
HOME | COURSES | TALKS | ARTICLES | GENERICS | LAMBDAS | IOSTREAMS | ABOUT | NEWSLETTER | CONTACT | Twitter | Lanyrd | Linkedin
About Angelika Langer  
HOME 
GENERICS 

LAMBDAS

    CONTENT
    FAQ
    LAMBDA TUTORIAL
    LAMBDA REFERENCE
    STREAM TUTORIAL
    STREAM REFERENCE
 
IOSTREAMS 
ABOUT 
NEWSLETTER 
CONTACT
Footnotes

This is a webpage devoted to lambda expressions in Java (a new language feature) and streams (new abstractions in the JDK's collection framework) - both were added to Java on March 18, 2014 with release 8. If you want to provide feedback or have any questions regarding lambda expressions in Java feel free to send me EMAIL or use the LAMBDA QUESTION form.
The Lambda Tutorial is available in PDF format (330KB) and in EPUB format (410KB) .
The Lambda Reference (note: it is an incomplete draft version) is available in PDF format (1200KB) .


Keep in mind that part of the Lambda/Streams Tutorial & References is still in draft version.

Footnotes
[1] See Wikipedia for examples of the syntax in which these languages express lambdas:  http://en.wikipedia.org/wiki/Lambda_calculus#Lambda_calculus_and_programming_languages .

[4] More precisely, object creation is no longer explicit.  Under the hood, a lambda expression is eventually translated into a synthetic class type and an instance thereof.  The key difference is that the class definition and instance creation is explicitly done by the programmer, when anonymous inner classes are used, whereas the class definition and instance creation is implicitly done by the runtime system.  Details regarding the translation process can be found in the section on "Lambda Translation" in the Lambda Reference document.

[5] See the section on "Method References" in the Lambda Reference document.

[6] If you are interested in the details of the creation of the lambda object please read the section on "Lambda Translation" in the Lambda Reference document or take a look at  http://cr.openjdk.java.net/~briangoetz/lambda/lambda-translation.html .

[7] Details regarding functional interfaces can be found in the section on "Functional Interfaces" in the Lambda Reference document.  These details include, for instance, that functional interfaces can under certain circumstances have more than one method. Also, there is a  @FunctionalInterface annotation that enables compiler checks for interfaces that are supposed to be used as functional interfaces.

[8] Expressions that have different type depending on the context in which they appear are called poly expression .  The actual type of a poly expression is always inferred by the compiler. Lambda expressions and method references are examples of poly expression. Poly expressions also occur in conjunction with generic; for example instance creation expressions that use a diamond  <> like  new ArrayList<>() are poly expressions.

[9] Details regarding functional interface conversion can be found in the sections on "Target Typing " and "Type Inference " in the Lambda Reference document.  There you find details regarding which context is suitable for functional interface conversion and how conversion to generic functional interfaces works.

[10] Details regarding the translation of lambda expressions can be found in the sections on "Translation of Lambda Expressions" in the Lambda Reference document.

[11] See Mark Reinhold's blog at  https://blogs.oracle.com/mr/entry/closures .

[12] The iterator pattern is one of the so-called Gang of Four design patterns
( Gamma, Erich, Helm, Richard, Johnson, Ralph, & Vlissides, John. (1995). 
Design patterns: Elements of reusable object-oriented software . Addison-Wesley. )

[13] The specification request JSR 335 can be found at  http://openjdk.java.net/projects/lambda/.


CONTENT   NEXT   INDEX
  © Copyright 1995-2013 by Angelika Langer.  All Rights Reserved.    URL: < http://www.AngelikaLanger.com/Lambdas/LambdaTutorial/lambdatutorial_8.html  last update: 8 May 2013