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)

PDF
Scala 2013 review
PDF
Java 8
PDF
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
PPTX
Clone Refactoring with Lambda Expressions
PDF
Scala for Java Developers - Intro
ODP
Introducing scala
PPT
Scala introduction
PDF
Scala Bootcamp 1
PDF
Scala for Java Programmers
PDF
Java 8 Stream API. A different way to process collections.
PPTX
collectionframework-141116005344-conversion-gate01.pptx
ODP
Groovy intro for OUDL
PPT
Core java by a introduction sandesh sharma
PDF
Scala collections api expressivity and brevity upgrade from java
PDF
A bit about Scala
PDF
Fantom - Programming Language for JVM, CLR, and Javascript
PDF
A Brief Introduction to Scala for Java Developers
PDF
Miles Sabin Introduction To Scala For Java Developers
PPTX
Scala on Android
PDF
Kotlin @ Devoxx 2011
Scala 2013 review
Java 8
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
Clone Refactoring with Lambda Expressions
Scala for Java Developers - Intro
Introducing scala
Scala introduction
Scala Bootcamp 1
Scala for Java Programmers
Java 8 Stream API. A different way to process collections.
collectionframework-141116005344-conversion-gate01.pptx
Groovy intro for OUDL
Core java by a introduction sandesh sharma
Scala collections api expressivity and brevity upgrade from java
A bit about Scala
Fantom - Programming Language for JVM, CLR, and Javascript
A Brief Introduction to Scala for Java Developers
Miles Sabin Introduction To Scala For Java Developers
Scala on Android
Kotlin @ Devoxx 2011

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
Heart disease approach using modified random forest and particle swarm optimi...
PDF
Encapsulation theory and applications.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Zenith AI: Advanced Artificial Intelligence
PPTX
cloud_computing_Infrastucture_as_cloud_p
PPTX
A Presentation on Touch Screen Technology
PDF
Approach and Philosophy of On baking technology
PDF
Getting Started with Data Integration: FME Form 101
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
A novel scalable deep ensemble learning framework for big data classification...
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
OMC Textile Division Presentation 2021.pptx
PDF
Web App vs Mobile App What Should You Build First.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
project resource management chapter-09.pdf
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Programs and apps: productivity, graphics, security and other tools
Heart disease approach using modified random forest and particle swarm optimi...
Encapsulation theory and applications.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Zenith AI: Advanced Artificial Intelligence
cloud_computing_Infrastucture_as_cloud_p
A Presentation on Touch Screen Technology
Approach and Philosophy of On baking technology
Getting Started with Data Integration: FME Form 101
Group 1 Presentation -Planning and Decision Making .pptx
A novel scalable deep ensemble learning framework for big data classification...
Building Integrated photovoltaic BIPV_UPV.pdf
OMC Textile Division Presentation 2021.pptx
Web App vs Mobile App What Should You Build First.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
project resource management chapter-09.pdf
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Programs and apps: productivity, graphics, security and other tools

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: Старый код работает, новый на старых классах тоже