SlideShare a Scribd company logo
LAMBDA IN JAVA 8
MIKE PONOMARENKO
ТЕОРИЯ

    Что такое замыкание (Lambda Expressions, JSR 335)
    Изменения в языке
    Сопутствующие изменения




2                         Sigma Ukraine
JSR 335
EARLY DRAFT R3
ТЕОРИЯ - ЗАМЫКАНИЯ

    Lambda expression
    – Анонимный метод
    – Может обращаться к переменным в локальной области
    – Нет лишнего .class при компиляции
    (x, y) => { System.out.println("The sum of x and y equals " +
    (x+y) )
    () => {return outerValue;}




4                             Sigma Ukraine
ПРИМЕР

error: local variables referenced from a lambda
expression must be final or effectively final

{
String ref = "a";
Runnable r = () -> {ref = "b";};
r.run();
System.out.println(ref);
}

 5                                  Sigma Ukraine
ПРИМЕР


{
Runnable r = ()->{System.out.println("hello");};
(new Thread(r)).start();
}




6                   Sigma Ukraine
ПРИМЕР


{
String ref = "a";
Runnable r = () -> {System.out.println(ref);};
r.run();
System.out.println(ref);
}



 7                 Sigma Ukraine
ПРИМЕР


String ref = "a";
Runnable r = new Runnable(){
      public void run(){
      System.out.println(ref);
    }
};
r.run();
System.out.println(ref);

 8                Sigma Ukraine
ПРИМЕР



{
List<String> strings = new LinkedList<String>();
Collections.sort(strings, (String a,String b) -> {
      return -(a.compareTo(b));
  });
}




 9                                Sigma Ukraine
ПРИМЕР



{
List<String> strings = new LinkedList<String>();
Collections.sort(strings, (a, b) -> -(a.compareTo(b)));
}




 10                               Sigma Ukraine
ТЕРИЯ, ИЗМЕНЕНИЯ В ЯЗЫКЕ

     Функциональный интерфейс
     – “A functional interface is an interface that has just one abstract
       method, and thus represents a single function contract. (In some
       cases, this "single" method may take the form of multiple
       abstract methods with override-equivalent signatures inherited
       from superinterfaces; in this case, the inherited methods logically
       represent a single method.)” - JSR
     Метод по умолчанию
     Ссылка на метод




11                               Sigma Ukraine
ТЕОРИЯ, МЕТОД ПО УМОЛЧАНИЮ



interface A{
       void doA();
}

interface B extends A{
      default void doB() {
            doA();
            doA();
       }
}
 12                     Sigma Ukraine
ТЕОРИЯ, МЕТОД ПО УМОЛЧАНИЮ



interface A{
       void doA();
      default void doB() {
             doA();
             doA();
       }
}




 13                    Sigma Ukraine
ТЕОРИЯ, ССЫЛКА НА МЕТОД

“A method reference is used to refer to a method without invoking it;
a constructor reference is similarly used to refer to a constructor without
 creating a new instance of the named class or array type.” - JSR


     System::getProperty
     "abc"::length
     String::length
     super::toString
     ArrayList::new
     int[]::new




14                                   Sigma Ukraine
ПРИМЕР


Collection<String> c = Arrays.asList("A","B","CD");
System.out.println(sum(c,String::length));




15                    Sigma Ukraine
ПРИМЕР

interface Code<T,R>{
         R exec(T input);
}

public static <T,R extends Number> long sum(Collection<T> c ,Code<T,R> cd){
         long rz = 0;
         for(T t : c){
                   R v = cd.exec(t);
                   if(v!=null) {
                            rz+=v.longValue();
                   }
         }
         return rz;
}



    16                           Sigma Ukraine
ПРИМЕР

import java.util.function.*;

public static <T,R extends Number> long sum(Collection<T> c ,
                                               Function<T,R> cd){
         long rz = 0;
         for(T t : c){
                   R v = cd.apply(t);
                   if(v!=null) {
                            rz+=v.longValue();
                   }
         }
         return rz;
}




  17                            Sigma Ukraine
JDK

     System.out.println(c.stream().map(String::length).sum());




18                            Sigma Ukraine
ТЕОРИЯ

  Добавляется в рантайм
  Множественное наследование поведения.
  Похоже на “C# extension methods”
  Наследование –
1. Суперкласс (“class wins”)
2. Более спецефичный интерфейс (“subtype wins”)
3. Делать вид что метод абстрактный
     1. Реализующий класс должен сделать выбор сам.
        A.super.m()




19                          Sigma Ukraine
JDK

interface Iterator<T> {
       boolean hasNext();
       T next();
       default void remove() {
               throw new UnsupportedOperationException();
       }
}




 20                       Sigma Ukraine
JDK

     interface Collection
     –   forEach
     –   removeIf(Predicate)
     –   stream()
     –   parallelStream()




21                             Sigma Ukraine
JDK


default Stream<E> stream() {
    return Streams.stream(() -> Streams.spliterator(iterator(),
              size(), Spliterator.SIZED), Spliterator.SIZED);
}

default Stream<E> parallelStream() {
    return stream().parallel();
}




  22                        Sigma Ukraine
JDK

public interface Stream<T> extends BaseStream<T, Stream<T>> {
  Stream<T> filter(Predicate<? super T> predicate);
  <R> Stream<R> map(Function<? super T, ? extends R> mapper);
  Stream<T> sorted();
  Optional<T> reduce(BinaryOperator<T> reducer);

         default Optional<T> max(Comparator<? super T> comparator) {
           return reduce(Comparators.greaterOf(comparator));
         }

         boolean anyMatch(Predicate<? super T> predicate);
}




    23                              Sigma Ukraine
JDK

     System.out.println(c.stream().map(String::length).sum());




24                            Sigma Ukraine
Thank you for your attention!

More Related Content

PPTX
Anti patterns
PDF
Java 8 Lambda Expressions
PDF
Java 8 - project lambda
PDF
The... Wonderful? World of Lambdas
PDF
Java Class Design
PDF
T3chFest 2016 - The polyglot programmer
PDF
Functional Algebra: Monoids Applied
PDF
Java Class Design
Anti patterns
Java 8 Lambda Expressions
Java 8 - project lambda
The... Wonderful? World of Lambdas
Java Class Design
T3chFest 2016 - The polyglot programmer
Functional Algebra: Monoids Applied
Java Class Design

What's hot (20)

PDF
Scala is java8.next()
PDF
CodeFest 2014. Axel Rauschmayer — JavaScript’s variables: scopes, environment...
PDF
Futures e abstração - QCon São Paulo 2015
PDF
Hierarchical free monads and software design in fp
PDF
If You Think You Can Stay Away from Functional Programming, You Are Wrong
PDF
The best language in the world
PDF
Quark: A Purely-Functional Scala DSL for Data Processing & Analytics
PDF
Java8 stream
PDF
Comparing JVM languages
PDF
Kotlin, why?
PDF
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
PPTX
Java Generics
PDF
Why Haskell
PPTX
Use of Apache Commons and Utilities
PDF
JavaOne 2016 - Learn Lambda and functional programming
PDF
The Ring programming language version 1.8 book - Part 86 of 202
PPT
Java Generics for Dummies
PPT
Implementation of 'go-like' language constructions in scala [english version]
PDF
Java patterns in Scala
PDF
Functional Programming in Java 8 - Exploiting Lambdas
Scala is java8.next()
CodeFest 2014. Axel Rauschmayer — JavaScript’s variables: scopes, environment...
Futures e abstração - QCon São Paulo 2015
Hierarchical free monads and software design in fp
If You Think You Can Stay Away from Functional Programming, You Are Wrong
The best language in the world
Quark: A Purely-Functional Scala DSL for Data Processing & Analytics
Java8 stream
Comparing JVM languages
Kotlin, why?
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
Java Generics
Why Haskell
Use of Apache Commons and Utilities
JavaOne 2016 - Learn Lambda and functional programming
The Ring programming language version 1.8 book - Part 86 of 202
Java Generics for Dummies
Implementation of 'go-like' language constructions in scala [english version]
Java patterns in Scala
Functional Programming in Java 8 - Exploiting Lambdas
Ad

Viewers also liked (7)

PDF
Lecture 3
PDF
Lambda Expressions and Java 8 - Lambda Calculus, Lambda Expressions, Syntacti...
ODP
Functions & closures
PDF
How To Use Higher Order Functions in Scala
PDF
Scala : language of the future
PDF
Scala Days NYC 2016
PDF
Introduction to Functional Programming with Scala
Lecture 3
Lambda Expressions and Java 8 - Lambda Calculus, Lambda Expressions, Syntacti...
Functions & closures
How To Use Higher Order Functions in Scala
Scala : language of the future
Scala Days NYC 2016
Introduction to Functional Programming with Scala
Ad

Similar to Lambda выражения и Java 8 (20)

PPTX
New features in jdk8 iti
PDF
Intro to Java 8 Closures (Dainius Mezanskas)
PDF
Intro to Java 8 Lambdas
PPTX
New Features in JDK 8
PPT
Major Java 8 features
PPTX
Java gets a closure
PDF
JAVA UNIT-3 ONE SHOT NOTES_64415856_2025_07_12_10__250712_103718.pdf
PDF
JAVA UNIT-3 ONE SHOT NOTES_64415856_2025_07_12_10__250712_103718.pdf
PDF
What's new in java 8
PDF
Java Version(v5 -v23) Features with sample code snippet
PPT
Pointcuts and Analysis
PDF
Java 8
PDF
Rcpp: Seemless R and C++
PPTX
Lambdas puzzler - Peter Lawrey
PDF
Advanced Data Science with Apache Spark-(Reza Zadeh, Stanford)
PPT
Functional Programming
DOCX
Net practicals lab mannual
PPTX
What is new in Java 8
PDF
Writing beautiful code with Java 8
PPTX
Legacy lambda code
New features in jdk8 iti
Intro to Java 8 Closures (Dainius Mezanskas)
Intro to Java 8 Lambdas
New Features in JDK 8
Major Java 8 features
Java gets a closure
JAVA UNIT-3 ONE SHOT NOTES_64415856_2025_07_12_10__250712_103718.pdf
JAVA UNIT-3 ONE SHOT NOTES_64415856_2025_07_12_10__250712_103718.pdf
What's new in java 8
Java Version(v5 -v23) Features with sample code snippet
Pointcuts and Analysis
Java 8
Rcpp: Seemless R and C++
Lambdas puzzler - Peter Lawrey
Advanced Data Science with Apache Spark-(Reza Zadeh, Stanford)
Functional Programming
Net practicals lab mannual
What is new in Java 8
Writing beautiful code with Java 8
Legacy lambda code

More from Alex Tumanoff (20)

PPTX
Sql server 2019 New Features by Yevhen Nedaskivskyi
PPTX
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
PPTX
Azure data bricks by Eugene Polonichko
PPTX
Sdlc by Anatoliy Anthony Cox
PPTX
Kostenko ux november-2014_1
PPTX
Java 8 in action.jinq.v.1.3
PPT
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
PPTX
Spring.new hope.1.3
PPTX
Sql saturday azure storage by Anton Vidishchev
PPTX
Navigation map factory by Alexey Klimenko
PPTX
Serialization and performance by Sergey Morenets
PPTX
Игры для мобильных платформ by Алексей Рыбаков
PDF
Android sync adapter
PPTX
Async clinic by by Sergey Teplyakov
PPTX
Deep Dive C# by Sergey Teplyakov
PPTX
Bdd by Dmitri Aizenberg
PPTX
Неформальные размышления о сертификации в IT
PPTX
Разработка расширений Firefox
PPTX
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
PPTX
Patterns of parallel programming
Sql server 2019 New Features by Yevhen Nedaskivskyi
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Azure data bricks by Eugene Polonichko
Sdlc by Anatoliy Anthony Cox
Kostenko ux november-2014_1
Java 8 in action.jinq.v.1.3
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
Spring.new hope.1.3
Sql saturday azure storage by Anton Vidishchev
Navigation map factory by Alexey Klimenko
Serialization and performance by Sergey Morenets
Игры для мобильных платформ by Алексей Рыбаков
Android sync adapter
Async clinic by by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
Bdd by Dmitri Aizenberg
Неформальные размышления о сертификации в IT
Разработка расширений Firefox
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
Patterns of parallel programming

Recently uploaded (20)

PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
A Presentation on Artificial Intelligence
PPTX
Spectroscopy.pptx food analysis technology
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
Tartificialntelligence_presentation.pptx
PPTX
cloud_computing_Infrastucture_as_cloud_p
PPTX
Machine Learning_overview_presentation.pptx
PDF
Mushroom cultivation and it's methods.pdf
PPTX
1. Introduction to Computer Programming.pptx
gpt5_lecture_notes_comprehensive_20250812015547.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Group 1 Presentation -Planning and Decision Making .pptx
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
A comparative analysis of optical character recognition models for extracting...
A Presentation on Artificial Intelligence
Spectroscopy.pptx food analysis technology
Network Security Unit 5.pdf for BCA BBA.
Univ-Connecticut-ChatGPT-Presentaion.pdf
Programs and apps: productivity, graphics, security and other tools
Spectral efficient network and resource selection model in 5G networks
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
SOPHOS-XG Firewall Administrator PPT.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
Tartificialntelligence_presentation.pptx
cloud_computing_Infrastucture_as_cloud_p
Machine Learning_overview_presentation.pptx
Mushroom cultivation and it's methods.pdf
1. Introduction to Computer Programming.pptx

Lambda выражения и Java 8

  • 1. LAMBDA IN JAVA 8 MIKE PONOMARENKO
  • 2. ТЕОРИЯ Что такое замыкание (Lambda Expressions, JSR 335) Изменения в языке Сопутствующие изменения 2 Sigma Ukraine
  • 4. ТЕОРИЯ - ЗАМЫКАНИЯ Lambda expression – Анонимный метод – Может обращаться к переменным в локальной области – Нет лишнего .class при компиляции (x, y) => { System.out.println("The sum of x and y equals " + (x+y) ) () => {return outerValue;} 4 Sigma Ukraine
  • 5. ПРИМЕР error: local variables referenced from a lambda expression must be final or effectively final { String ref = "a"; Runnable r = () -> {ref = "b";}; r.run(); System.out.println(ref); } 5 Sigma Ukraine
  • 6. ПРИМЕР { Runnable r = ()->{System.out.println("hello");}; (new Thread(r)).start(); } 6 Sigma Ukraine
  • 7. ПРИМЕР { String ref = "a"; Runnable r = () -> {System.out.println(ref);}; r.run(); System.out.println(ref); } 7 Sigma Ukraine
  • 8. ПРИМЕР String ref = "a"; Runnable r = new Runnable(){ public void run(){ System.out.println(ref); } }; r.run(); System.out.println(ref); 8 Sigma Ukraine
  • 9. ПРИМЕР { List<String> strings = new LinkedList<String>(); Collections.sort(strings, (String a,String b) -> { return -(a.compareTo(b)); }); } 9 Sigma Ukraine
  • 10. ПРИМЕР { List<String> strings = new LinkedList<String>(); Collections.sort(strings, (a, b) -> -(a.compareTo(b))); } 10 Sigma Ukraine
  • 11. ТЕРИЯ, ИЗМЕНЕНИЯ В ЯЗЫКЕ Функциональный интерфейс – “A functional interface is an interface that has just one abstract method, and thus represents a single function contract. (In some cases, this "single" method may take the form of multiple abstract methods with override-equivalent signatures inherited from superinterfaces; in this case, the inherited methods logically represent a single method.)” - JSR Метод по умолчанию Ссылка на метод 11 Sigma Ukraine
  • 12. ТЕОРИЯ, МЕТОД ПО УМОЛЧАНИЮ interface A{ void doA(); } interface B extends A{ default void doB() { doA(); doA(); } } 12 Sigma Ukraine
  • 13. ТЕОРИЯ, МЕТОД ПО УМОЛЧАНИЮ interface A{ void doA(); default void doB() { doA(); doA(); } } 13 Sigma Ukraine
  • 14. ТЕОРИЯ, ССЫЛКА НА МЕТОД “A method reference is used to refer to a method without invoking it; a constructor reference is similarly used to refer to a constructor without creating a new instance of the named class or array type.” - JSR System::getProperty "abc"::length String::length super::toString ArrayList::new int[]::new 14 Sigma Ukraine
  • 15. ПРИМЕР Collection<String> c = Arrays.asList("A","B","CD"); System.out.println(sum(c,String::length)); 15 Sigma Ukraine
  • 16. ПРИМЕР interface Code<T,R>{ R exec(T input); } public static <T,R extends Number> long sum(Collection<T> c ,Code<T,R> cd){ long rz = 0; for(T t : c){ R v = cd.exec(t); if(v!=null) { rz+=v.longValue(); } } return rz; } 16 Sigma Ukraine
  • 17. ПРИМЕР import java.util.function.*; public static <T,R extends Number> long sum(Collection<T> c , Function<T,R> cd){ long rz = 0; for(T t : c){ R v = cd.apply(t); if(v!=null) { rz+=v.longValue(); } } return rz; } 17 Sigma Ukraine
  • 18. JDK System.out.println(c.stream().map(String::length).sum()); 18 Sigma Ukraine
  • 19. ТЕОРИЯ Добавляется в рантайм Множественное наследование поведения. Похоже на “C# extension methods” Наследование – 1. Суперкласс (“class wins”) 2. Более спецефичный интерфейс (“subtype wins”) 3. Делать вид что метод абстрактный 1. Реализующий класс должен сделать выбор сам. A.super.m() 19 Sigma Ukraine
  • 20. JDK interface Iterator<T> { boolean hasNext(); T next(); default void remove() { throw new UnsupportedOperationException(); } } 20 Sigma Ukraine
  • 21. JDK interface Collection – forEach – removeIf(Predicate) – stream() – parallelStream() 21 Sigma Ukraine
  • 22. JDK default Stream<E> stream() { return Streams.stream(() -> Streams.spliterator(iterator(), size(), Spliterator.SIZED), Spliterator.SIZED); } default Stream<E> parallelStream() { return stream().parallel(); } 22 Sigma Ukraine
  • 23. JDK public interface Stream<T> extends BaseStream<T, Stream<T>> { Stream<T> filter(Predicate<? super T> predicate); <R> Stream<R> map(Function<? super T, ? extends R> mapper); Stream<T> sorted(); Optional<T> reduce(BinaryOperator<T> reducer); default Optional<T> max(Comparator<? super T> comparator) { return reduce(Comparators.greaterOf(comparator)); } boolean anyMatch(Predicate<? super T> predicate); } 23 Sigma Ukraine
  • 24. JDK System.out.println(c.stream().map(String::length).sum()); 24 Sigma Ukraine
  • 25. Thank you for your attention!

Editor's Notes

  • #2: Hello and welcome to Sigma Ukraine!
  • #13: А нужен ли Б?
  • #14: Старый код работает, новый на старых классах тоже