SlideShare uma empresa Scribd logo
1 de 75
Functional Java 8
This Ain’t Your Daddy’s JDK

Nick Maiorano
1
ThoughtFlow Solutions Inc.
About me
Developer

Software
Architect

Independent
Consultant
ThoughtFlow Solutions

Functional Java 8 – This Ain’t Your Daddy’s JDK

2
Available April 2014

Functional Java 8 – This Ain’t Your Daddy’s JDK

3
Functional Java 8 – This Ain’t Your Daddy’s JDK

4
What’s in Java 8?
Encoding
enhancements

Encryption
updates

Functional
libraries

Concurrency
Modularization

Repeating
annotations

New
Date/Time
API

Concurrency
updates

Java 8
Lambdas
Nashorn
JavaScript
Engine

Church
Performance
improvements

Functional Java 8 – This Ain’t Your Daddy’s JDK

GC
updates

Collections

5
What’s in Java 8?
Functional
libraries

Concurrency

Java 8
Lambdas

Church

Functional Java 8 – This Ain’t Your Daddy’s JDK

Collections

6
The rocky road to lambdas
•
•
•
•
•
•

Lambdas too difficult in late 1990s
BGGA project initiated in 2007
JSR 335 filed in late 2009
Had to fit type system
Maintain backward compatibility
Java community divided

Functional Java 8 – This Ain’t Your Daddy’s JDK

7
The rocky road to lambdas
•
•
•
•

To be released as part of Java 7
To be released in September 2013
To be released in March 2014
Completing 7 years of work

Functional Java 8 – This Ain’t Your Daddy’s JDK

8
Functional Programming
• Rooted in lambda calculus
• Hastened by death of Moore’s law
• Programming paradigm of the times

Functional Java 8 – This Ain’t Your Daddy’s JDK

9
Java DNA
Structured

Reflective

Object
Oriented

Imperative

Concurrent
Generic

Generic
Java DNA
Structured

Reflective

Object
Oriented

Functional

Imperative

Concurrent
Generic

Generic
Organization
Java

Classes
Vs.

FP

Functional Java 8 – This Ain’t Your Daddy’s JDK

Functions

12
Building blocks
Java

Polymorphism, encapsulation,
inheritance, dynamic binding
Vs.

FP

Functional Java 8 – This Ain’t Your Daddy’s JDK

Higher-order functions, currying,
monads, list comprehensions

13
Algorithmic style
Java

Imperative: define behaviour as a
series of steps
Vs.

FP

Functional Java 8 – This Ain’t Your Daddy’s JDK

Declarative: binding functions together
without necessarily specifying their
contents

14
State management
Java

Put state and behaviour together
Vs.

FP

Functional Java 8 – This Ain’t Your Daddy’s JDK

Avoid state

15
Mutability
Java

Supports mutability & immutability
Vs.

FP

Functional Java 8 – This Ain’t Your Daddy’s JDK

Emphasis on immutability

16
Design patterns
Java

Relies on design patterns to
complement OOP for a higher level of
abstraction
Vs.

FP

Functional Java 8 – This Ain’t Your Daddy’s JDK

Is already a higher level abstraction

17
Concurrency
Java

Use multi-threading, control access to
shared resources via locks
Vs.

FP

Functional Java 8 – This Ain’t Your Daddy’s JDK

Organize processing into parallel workflows
each dedicated to a core and avoid state,
shared resources and locks

18
Recursion
Java

Supported with limitations
Vs.

FP

Functional Java 8 – This Ain’t Your Daddy’s JDK

Rudimentary

19
Expressiveness
Java

Clear & verbose
Vs.

FP

Functional Java 8 – This Ain’t Your Daddy’s JDK

Concise & dense

20
Functional Java
“…Is a blend of imperative and object
oriented programming enhanced
with functional flavors”

Functional Java 8 – This Ain’t Your Daddy’s JDK

21
Functional Java 8 – This Ain’t Your Daddy’s JDK

22
New Syntax
•
•
•
•

Lambdas
Functional interfaces
Method references
Default methods

Functional Java 8 – This Ain’t Your Daddy’s JDK

23
What’s a lambda?

Functional Java 8 – This Ain’t Your Daddy’s JDK

24
Anatomy of the lambda
• Behavior-as-data facilitators
• On-the-fly code definers
• Ground-floor of FP

Functional Java 8 – This Ain’t Your Daddy’s JDK

25
Anatomy of the lambda
Lambda blocks
(Parameter declaration) -> {Lambda body}

(Integer i) -> {System.out.println(i);};

Functional Java 8 – This Ain’t Your Daddy’s JDK

26
Anatomy of the lambda
Lambda blocks
(Parameter declaration) -> {Lambda body}

(Integer i) -> {System.out.println(i);};

Functional Java 8 – This Ain’t Your Daddy’s JDK

27
Anatomy of the lambda
Lambda expressions
Parameter name -> Lambda expression

(Integer i) -> {System.out.println(i);};

Functional Java 8 – This Ain’t Your Daddy’s JDK

28
Anatomy of the lambda
Lambda expressions
Parameter name -> Lambda expression

i -> System.out.println(i);

Functional Java 8 – This Ain’t Your Daddy’s JDK

29
Anatomy of the lambda
Lambda expressions
Parameter name -> single statement;

i -> i * 2;

Functional Java 8 – This Ain’t Your Daddy’s JDK

No return statement

30
Functional Interfaces
• Lambdas are backed by interfaces
• Single abstract methods
• @FunctionalInterface

Functional Java 8 – This Ain’t Your Daddy’s JDK

31
Functional Interfaces
@FunctionalInterface
public interface Calculator
{
int calculate(int x, int y);
}

Functional Java 8 – This Ain’t Your Daddy’s JDK

32
Functional Interfaces
Calculator multiply = (x, y) -> x * y;
Calculator divide = (x, y) -> x / y;

int product = multiply.calculate(10, 20);
int quotient = divide.calculate(10, 20);
someMethod(multiply, divide);
anotherMethod((x, y) -> x ^ y);
Functional Java 8 – This Ain’t Your Daddy’s JDK

33
Functional Interfaces
• Over 40 functional interfaces in JDK 8
• Rarely need to define your own
• Generic and specialized

Functional Java 8 – This Ain’t Your Daddy’s JDK

34
Functional Interfaces
Consumer

Supplier<T>
T get()

Supplier

Functional
Interfaces

Consumer<T>
void accept(T t);

Function

Function <T, R>
R apply(T t);

Predicate

Predicate<T>
boolean test(T t);

Functional Java 8 – This Ain’t Your Daddy’s JDK

35
Method References
Calculator maxFinder = (x, y) -> Math.max(x, y);

Functional Java 8 – This Ain’t Your Daddy’s JDK

36
Method References
Calculator maxFinder = Math::max;
Math
Calculator

int max(int a, int b);
int calculate(int x, int y);

Functional Java 8 – This Ain’t Your Daddy’s JDK

37
Method References
Type

Template

Static

Class::method

Instance

instanceVariable::method

Constructor

Class::new

Super

super::method

Generic constructor

Class<Type>::new

Array

Class[]::new

Functional Java 8 – This Ain’t Your Daddy’s JDK

38
Anonymous classes?
• Do we still need anonymous classes?
• Lambdas are behavior-only – no state
• Only single abstract methods

Functional Java 8 – This Ain’t Your Daddy’s JDK

39
Default Methods
@FunctionalInterface
public interface Calculator
{
int calculate(int x, int y);
default int multiply(int x, int y)
{
return x * y;
}
}
Functional Java 8 – This Ain’t Your Daddy’s JDK

40
Default Methods
• Can be overloaded
• Can be static or instance based
• Introduce multiple inheritance

Functional Java 8 – This Ain’t Your Daddy’s JDK

41
Functional Java 8 – This Ain’t Your Daddy’s JDK

42
Java-style functional programming
• Other languages support FP natively
• Java supports FP through libraries

Functional
interfaces

Functional

Java
Streams

Collections

Functional Java 8 – This Ain’t Your Daddy’s JDK

43
Functionalized Collections

Functional Java 8 – This Ain’t Your Daddy’s JDK

44
Functionalized Lists
List<String> stooges =
Arrays.asList("Larry", "Moe", "Curly");

stooges.forEach(s -> System.out.println(s);

Functional Java 8 – This Ain’t Your Daddy’s JDK

45
Functionalized Lists
List<String> stooges =
Arrays.asList("Larry", "Moe", "Curly");

stooges.forEach(System.out::println);

Functional Java 8 – This Ain’t Your Daddy’s JDK

46
Functionalized Lists
Function<String, String> feminize =
s -> "Larry".equals(s) ? "Lara" :
"Moe".equals(s) ? "Maude" : "Shirley";
stooges.replaceAll(feminize);

Functional Java 8 – This Ain’t Your Daddy’s JDK

47
Functionalized Lists
Predicate<String> moeRemover =
s -> “Moe".equals(s);

stooges.removeIf(moeRemover);

Functional Java 8 – This Ain’t Your Daddy’s JDK

48
Functionalized Maps
Map<Integer, List<String>> movieDb = new HashMap<>();
movieDb.computeIfAbsent(1930, k -> new LinkedList<>());
movieDb.compute(1930, (k, v) -> { v.add(“Soup to nuts”);
return v;});

Functional Java 8 – This Ain’t Your Daddy’s JDK

49
Functionalized Maps
movieDb.putIfAbsent
(1930, new LinkedList<>());

movieDb.getOrDefault
(1930, new LinkedList<>());

Functional Java 8 – This Ain’t Your Daddy’s JDK

50
Streams

Functional Java 8 – This Ain’t Your Daddy’s JDK

51
Streams
Lambda

Stream

Operation 1

Functional Java 8 – This Ain’t Your Daddy’s JDK

Lambda

Operation 2

Lambda

Operation 3

Lambda

Operation 4

52
Streams
Build

Peek

Filter

Stream
operations
Iterate

Map

Reduce

Functional Java 8 – This Ain’t Your Daddy’s JDK

53
Streams
private static boolean isPerfect(long n)
{
long sum = 0;
for (long i = 1; i <= n / 2; i++)
{
if (n % i == 0)
{
sum += i;
}
}

return sum == n;
}
Functional Java 8 – This Ain’t Your Daddy’s JDK

54
Streams
private static boolean isPerfect(long n)
{
return n > 0 &&
LongStream.rangeClosed(1, n / 2).
filter(i -> n % i == 0).
reduce(0, (l, r) -> l + r) == n;
}

Functional Java 8 – This Ain’t Your Daddy’s JDK

55
Streams
•
•
•
•

Declarative constructs
Can abstract any imperative for/while loop
Work best when adhering to FP principles
Easily parallelizable

Functional Java 8 – This Ain’t Your Daddy’s JDK

56
Parallel Streams
private static boolean isPerfect(long n)
{
return n > 0 &&
LongStream.rangeClosed(1, n / 2).
filter(i -> n % i == 0).
reduce(0, (l, r) -> l + r) == n;
}

Functional Java 8 – This Ain’t Your Daddy’s JDK

57
Parallel Streams
private static boolean isPerfect(long n)
{
return n > 0 &&
LongStream.rangeClosed(1, n / 2). parallel().
filter(i -> n % i == 0).
reduce(0, (l, r) -> l + r) == n;
}

Functional Java 8 – This Ain’t Your Daddy’s JDK

58
Parallel Streams

Functional Java 8 – This Ain’t Your Daddy’s JDK

59
Parallel Streams

Functional Java 8 – This Ain’t Your Daddy’s JDK

60
Parallel Streams
• Uses fork-join used under the hood
• Thread pool sized to # cores
• Order can be changed

Functional Java 8 – This Ain’t Your Daddy’s JDK

61
Parallel Streams
private static boolean isPerfect(long n)
{
return n > 0 &&
LongStream.rangeClosed(1, n / 2). parallel().
filter(i -> n % i == 0).
reduce(0, (l, r) -> l + r) == n;
}

Functional Java 8 – This Ain’t Your Daddy’s JDK

62
Parallel Streams
private static boolean isPerfect(long n)
{
return n > 0 &&
LongStream.rangeClosed(1, n / 2). parallel().
filter(i -> n % i == 0).
reduce(0, (l, r) -> l + r) == n;
}
List<Long> perfectNumbers =
LongStream.rangeClosed(1, 8192).
filter(PerfectNumberFinder::isPerfect).
collect(ArrayList<Long>::new, ArrayList<Long>::add, ArrayList<Long>::addAll);

Functional Java 8 – This Ain’t Your Daddy’s JDK

63
Parallel Streams
private static boolean isPerfect(long n)
{
return n > 0 &&
LongStream.rangeClosed(1, n / 2). parallel().
filter(i -> n % i == 0).
reduce(0, (l, r) -> l + r) == n;
}
List<Long> perfectNumbers =
LongStream.rangeClosed(1, 8192).parallel().
filter(PerfectNumberFinder::isPerfect).
collect(ArrayList<Long>::new, ArrayList<Long>::add, ArrayList<Long>::addAll);

Functional Java 8 – This Ain’t Your Daddy’s JDK

64
Parallel Streams
8,128
33,550,336
8,589,869,056
137,438,691,328

Functional Java 8 – This Ain’t Your Daddy’s JDK

Imperative
0
190
48648
778853

Serial
Stream

1
229
59646
998776

Parallel
Stream

0
66
13383
203651

65
Parallelization
• Must avoid side-effects and mutating state
• Problems must fit the associativity property
• Ex: ((a * b) * c) = (a * (b * c))

• Must be enough parallelizable code
• Performance not always better
• Can’t modify local variables (unlike for loops)

Functional Java 8 – This Ain’t Your Daddy’s JDK

66
Streams (the good)
•
•
•
•

Allow abstraction of details
Communicate intent clearly
Concise
On-demand parallelization

Functional Java 8 – This Ain’t Your Daddy’s JDK

67
Streams (the bad)
•
•
•
•

Loss of flexibility and control
Increased code density
Can be less efficient
On-demand parallelization

Functional Java 8 – This Ain’t Your Daddy’s JDK

68
Functional Java 8 – This Ain’t Your Daddy’s JDK

69
Final thoughts on
Java 8

Functional Java 8 – This Ain’t Your Daddy’s JDK

70
How good is functional Java?
•
•
•
•
•
•

Java now supports functional constructs
But still OO at its core
Functional expressions a little clunky
Generics require more mental agility
Conciseness is compromised
Recursion not industrial strength

Functional Java 8 – This Ain’t Your Daddy’s JDK

71
How good is functional Java?
• FP integrated cohesively & coherently
• New tools available for the masses

Functional Java 8 – This Ain’t Your Daddy’s JDK

72
Available at Amazon April 2014

Functional Java 8 – This Ain’t Your Daddy’s JDK

73
@ThoughtFlow_Inc

Functional Java 8 – This Ain’t Your Daddy’s JDK

74
Questions

Functional Java 8 – This Ain’t Your Daddy’s JDK

75

Mais conteúdo relacionado

Mais procurados

New Features in JDK 8
New Features in JDK 8New Features in JDK 8
New Features in JDK 8Martin Toshev
 
Refactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 RecapRefactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 RecapDave Orme
 
Kotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersKotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersBartosz Kosarzycki
 
The Dark Side Of Lambda Expressions in Java 8
The Dark Side Of Lambda Expressions in Java 8The Dark Side Of Lambda Expressions in Java 8
The Dark Side Of Lambda Expressions in Java 8Takipi
 
Modern Programming in Java 8 - Lambdas, Streams and Date Time API
Modern Programming in Java 8 - Lambdas, Streams and Date Time APIModern Programming in Java 8 - Lambdas, Streams and Date Time API
Modern Programming in Java 8 - Lambdas, Streams and Date Time APIGanesh Samarthyam
 
A Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to ScalaA Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to ScalaDerek Chen-Becker
 
New Features Of JDK 7
New Features Of JDK 7New Features Of JDK 7
New Features Of JDK 7Deniz Oguz
 
Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams Ganesh Samarthyam
 
Java SE 8 - New Features
Java SE 8 - New FeaturesJava SE 8 - New Features
Java SE 8 - New FeaturesNaveen Hegde
 
Kotlin in action
Kotlin in actionKotlin in action
Kotlin in actionCiro Rizzo
 
Scala : language of the future
Scala : language of the futureScala : language of the future
Scala : language of the futureAnsviaLab
 
Advanced Production Debugging
Advanced Production DebuggingAdvanced Production Debugging
Advanced Production DebuggingTakipi
 

Mais procurados (20)

New Features in JDK 8
New Features in JDK 8New Features in JDK 8
New Features in JDK 8
 
Refactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 RecapRefactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 Recap
 
Java 8 features
Java 8 featuresJava 8 features
Java 8 features
 
Smart Migration to JDK 8
Smart Migration to JDK 8Smart Migration to JDK 8
Smart Migration to JDK 8
 
Kotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersKotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developers
 
Java 8 features
Java 8 featuresJava 8 features
Java 8 features
 
The Dark Side Of Lambda Expressions in Java 8
The Dark Side Of Lambda Expressions in Java 8The Dark Side Of Lambda Expressions in Java 8
The Dark Side Of Lambda Expressions in Java 8
 
Modern Programming in Java 8 - Lambdas, Streams and Date Time API
Modern Programming in Java 8 - Lambdas, Streams and Date Time APIModern Programming in Java 8 - Lambdas, Streams and Date Time API
Modern Programming in Java 8 - Lambdas, Streams and Date Time API
 
JDK1.6
JDK1.6JDK1.6
JDK1.6
 
A Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to ScalaA Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to Scala
 
Java 8 Features
Java 8 FeaturesJava 8 Features
Java 8 Features
 
New Features Of JDK 7
New Features Of JDK 7New Features Of JDK 7
New Features Of JDK 7
 
Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams
 
Java SE 8 - New Features
Java SE 8 - New FeaturesJava SE 8 - New Features
Java SE 8 - New Features
 
Spark workshop
Spark workshopSpark workshop
Spark workshop
 
Java 8 lambda
Java 8 lambdaJava 8 lambda
Java 8 lambda
 
Kotlin in action
Kotlin in actionKotlin in action
Kotlin in action
 
Scala Intro
Scala IntroScala Intro
Scala Intro
 
Scala : language of the future
Scala : language of the futureScala : language of the future
Scala : language of the future
 
Advanced Production Debugging
Advanced Production DebuggingAdvanced Production Debugging
Advanced Production Debugging
 

Destaque

Functional programming with_jdk8-s_ritter
Functional programming with_jdk8-s_ritterFunctional programming with_jdk8-s_ritter
Functional programming with_jdk8-s_ritterSimon Ritter
 
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...jaxLondonConference
 
Java class loader
Java class loaderJava class loader
Java class loaderbenewu
 
Application of Ontology in Semantic Information Retrieval by Prof Shahrul Azm...
Application of Ontology in Semantic Information Retrieval by Prof Shahrul Azm...Application of Ontology in Semantic Information Retrieval by Prof Shahrul Azm...
Application of Ontology in Semantic Information Retrieval by Prof Shahrul Azm...Khirulnizam Abd Rahman
 
Classloading and Type Visibility in OSGi
Classloading and Type Visibility in OSGiClassloading and Type Visibility in OSGi
Classloading and Type Visibility in OSGimartinlippert
 
Lambdas And Streams Hands On Lab
Lambdas And Streams Hands On LabLambdas And Streams Hands On Lab
Lambdas And Streams Hands On LabSimon Ritter
 
Self adaptive based natural language interface for disambiguation of
Self adaptive based natural language interface for disambiguation ofSelf adaptive based natural language interface for disambiguation of
Self adaptive based natural language interface for disambiguation ofNurfadhlina Mohd Sharef
 
Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)Peter R. Egli
 
Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGiIlya Rybak
 
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A GrzesikApache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesikmfrancis
 
The Full Stack Java Developer - Josh Long
The Full Stack Java Developer - Josh LongThe Full Stack Java Developer - Josh Long
The Full Stack Java Developer - Josh Longploibl
 
Microservices OSGi-running-with-apache-karaf
Microservices OSGi-running-with-apache-karafMicroservices OSGi-running-with-apache-karaf
Microservices OSGi-running-with-apache-karafAchim Nierbeck
 
Regular Expressions 101
Regular Expressions 101Regular Expressions 101
Regular Expressions 101Raj Rajandran
 
Lecture: Regular Expressions and Regular Languages
Lecture: Regular Expressions and Regular LanguagesLecture: Regular Expressions and Regular Languages
Lecture: Regular Expressions and Regular LanguagesMarina Santini
 

Destaque (20)

Functional programming with_jdk8-s_ritter
Functional programming with_jdk8-s_ritterFunctional programming with_jdk8-s_ritter
Functional programming with_jdk8-s_ritter
 
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
 
Java Class Loading
Java Class LoadingJava Class Loading
Java Class Loading
 
Java class loader
Java class loaderJava class loader
Java class loader
 
Application of Ontology in Semantic Information Retrieval by Prof Shahrul Azm...
Application of Ontology in Semantic Information Retrieval by Prof Shahrul Azm...Application of Ontology in Semantic Information Retrieval by Prof Shahrul Azm...
Application of Ontology in Semantic Information Retrieval by Prof Shahrul Azm...
 
Incremental Evolving Grammar Fragments
Incremental Evolving Grammar FragmentsIncremental Evolving Grammar Fragments
Incremental Evolving Grammar Fragments
 
Classloading and Type Visibility in OSGi
Classloading and Type Visibility in OSGiClassloading and Type Visibility in OSGi
Classloading and Type Visibility in OSGi
 
Carbon and OSGi Deep Dive
Carbon and OSGi Deep DiveCarbon and OSGi Deep Dive
Carbon and OSGi Deep Dive
 
OSGi Presentation
OSGi PresentationOSGi Presentation
OSGi Presentation
 
Lambdas And Streams Hands On Lab
Lambdas And Streams Hands On LabLambdas And Streams Hands On Lab
Lambdas And Streams Hands On Lab
 
Self adaptive based natural language interface for disambiguation of
Self adaptive based natural language interface for disambiguation ofSelf adaptive based natural language interface for disambiguation of
Self adaptive based natural language interface for disambiguation of
 
Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)
 
Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGi
 
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A GrzesikApache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
 
The Full Stack Java Developer - Josh Long
The Full Stack Java Developer - Josh LongThe Full Stack Java Developer - Josh Long
The Full Stack Java Developer - Josh Long
 
Introduction to-osgi
Introduction to-osgiIntroduction to-osgi
Introduction to-osgi
 
OSGi Blueprint Services
OSGi Blueprint ServicesOSGi Blueprint Services
OSGi Blueprint Services
 
Microservices OSGi-running-with-apache-karaf
Microservices OSGi-running-with-apache-karafMicroservices OSGi-running-with-apache-karaf
Microservices OSGi-running-with-apache-karaf
 
Regular Expressions 101
Regular Expressions 101Regular Expressions 101
Regular Expressions 101
 
Lecture: Regular Expressions and Regular Languages
Lecture: Regular Expressions and Regular LanguagesLecture: Regular Expressions and Regular Languages
Lecture: Regular Expressions and Regular Languages
 

Semelhante a Functional java 8

Java jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3mJava jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3mSteve Elliott
 
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and StreamsIntroduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and StreamsEmiel Paasschens
 
Fundamentals of java --- version 2
Fundamentals of java --- version 2Fundamentals of java --- version 2
Fundamentals of java --- version 2Uday Sharma
 
1 Module 1 Introduction.pptx
1 Module 1 Introduction.pptx1 Module 1 Introduction.pptx
1 Module 1 Introduction.pptxBhargaviDalal3
 
Polyglot and functional (Devoxx Nov/2011)
Polyglot and functional (Devoxx Nov/2011)Polyglot and functional (Devoxx Nov/2011)
Polyglot and functional (Devoxx Nov/2011)Martijn Verburg
 
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"GlobalLogic Ukraine
 
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)Kevin Sutter
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Rittercatherinewall
 
ADBA (Asynchronous Database Access)
ADBA (Asynchronous Database Access)ADBA (Asynchronous Database Access)
ADBA (Asynchronous Database Access)Logico
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9Ivan Krylov
 
Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Martijn Verburg
 
55 New Features in Java SE 8
55 New Features in Java SE 855 New Features in Java SE 8
55 New Features in Java SE 8Simon Ritter
 

Semelhante a Functional java 8 (20)

Java jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3mJava jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3m
 
Java 8 Lambda
Java 8 LambdaJava 8 Lambda
Java 8 Lambda
 
Reaching the lambda heaven
Reaching the lambda heavenReaching the lambda heaven
Reaching the lambda heaven
 
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and StreamsIntroduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
 
Fundamentals of java --- version 2
Fundamentals of java --- version 2Fundamentals of java --- version 2
Fundamentals of java --- version 2
 
1 Module 1 Introduction.pptx
1 Module 1 Introduction.pptx1 Module 1 Introduction.pptx
1 Module 1 Introduction.pptx
 
Java 8 Overview
Java 8 OverviewJava 8 Overview
Java 8 Overview
 
Polyglot and functional (Devoxx Nov/2011)
Polyglot and functional (Devoxx Nov/2011)Polyglot and functional (Devoxx Nov/2011)
Polyglot and functional (Devoxx Nov/2011)
 
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
 
Java SE 8
Java SE 8Java SE 8
Java SE 8
 
Developing android apps with java 8
Developing android apps with java 8Developing android apps with java 8
Developing android apps with java 8
 
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
InterConnect 2016, OpenJPA and EclipseLink Usage Scenarios (PEJ-5303)
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Ritter
 
ADBA (Asynchronous Database Access)
ADBA (Asynchronous Database Access)ADBA (Asynchronous Database Access)
ADBA (Asynchronous Database Access)
 
AMIS Oracle OpenWorld 2013 Review Part 3 - Fusion Middleware
AMIS Oracle OpenWorld 2013 Review Part 3 - Fusion MiddlewareAMIS Oracle OpenWorld 2013 Review Part 3 - Fusion Middleware
AMIS Oracle OpenWorld 2013 Review Part 3 - Fusion Middleware
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
Java 7 & 8
Java 7 & 8Java 7 & 8
Java 7 & 8
 
Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)
 
55 New Features in Java SE 8
55 New Features in Java SE 855 New Features in Java SE 8
55 New Features in Java SE 8
 
Scala-Ls1
Scala-Ls1Scala-Ls1
Scala-Ls1
 

Último

Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 

Último (20)

Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 

Functional java 8