SlideShare uma empresa Scribd logo
1 de 121
Baixar para ler offline
START
MovieTime!
Andrzej Grzesik Konrad Malawski
JAVA 8
Andrzej Grzesik Konrad Malawski
JAVA 8
THE GOOD PARTS
Andrzej Grzesik Konrad Malawski
@ags313
andrzej@grzesik.it
andrzejgrzesik.info
Andrzej Grzesik
ABOUT:ME
 
Konrad `@ktosopl` Malawski
 
Konrad `@ktosopl` Malawski
OUR OPINIONS
ARE OUR OWN
disclaimer
QUESTIONS?
QUESTIONS?
ask them right away!
JAVA 8
is going to be amazing!
TWITTER SAYS:
JAVA 8 ISTHE NEW GUAVA
THE MOST EXCITING RELEASE IN HISTORY
DONE WITH COMMUNITY
ADOPT OPENJDK
adoptopenjdk.java.net
YOU CAN HELP!
FIX
TEST
HACK
DOCUMENT
ADOPTOPENJDK.JAVA.NET
ADOPTAJSR.JAVA.NET
HOW DO I CHECK JDK8?
JDK8.JAVA.NET
IDE SUPPORT
JENV
http://jenv.be
JENV
$ jenv versions
system
oracle64-1.6.0.51
oracle64-1.7.0.40
* oracle64-1.8.0-ea (set by /Users/ktoso/.jenv/version)
JENV
ktoso @ 月/tmp
$ jenv local oracle64-1.7.0.40
JENV
ktoso @ 月/tmp
$ jenv versions
systema
oracle64-1.6.0.51
* oracle64-1.7.0.40 (set by /tmp/.java-version)
oracle64-1.8.0-ea
ktoso @ 月/tmp
$ jenv local oracle64-1.7.0.40
NEWTIME API
jsr 310
void immutable()
{
LocalTime aTime = LocalTime.now();
print("now: %s", aTime);
LocalTime newTime = aTime.plusMinutes(16);
print("now: %s, later: %s", aTime, newTime);
}
void immutable()
{
LocalTime aTime = LocalTime.now();
print("now: %s", aTime);
LocalTime newTime = aTime.plusMinutes(16);
print("now: %s, later: %s", aTime, newTime);
}
now: 01:25:56.916
now: 01:25:56.916
later: 01:41:56.916
void immutable()
{
LocalTime aTime = LocalTime.now();
print("now: %s", aTime);
LocalTime newTime = aTime.plusMinutes(16);
print("now: %s, later: %s", aTime, newTime);
}
now: 01:25:56.916
private void localTime()
{
LocalDate today = LocalDate.now();
LocalDate yesterday = today.minusDays(1);
// Geek Bike Ride!
LocalDateTime localDateTime = yesterday.atTime(11, 30);
LocalDateTime earlyMorning = LocalDate.of(2013, 9, 22)
.atStartOfDay();
}
void flightTime()
{
ZoneId LHR = ZoneId.of("Europe/London");
ZoneId SFO = ZoneId.of("America/Los_Angeles");
LocalDate date = LocalDate.of(2013, Month.SEPTEMBER, 14);
LocalTime takeoff = LocalTime.of(12, 50);
LocalTime landing = LocalTime.of(16, 20);
Duration flightTime = Duration.between(
ZonedDateTime.of(date, takeoff, LHR),
ZonedDateTime.of(date, landing, SFO));
System.out.println("Flight time: " + flightTime);
}
void flightTime()
{
ZoneId LHR = ZoneId.of("Europe/London");
ZoneId SFO = ZoneId.of("America/Los_Angeles");
LocalDate date = LocalDate.of(2013, Month.SEPTEMBER, 14);
LocalTime takeoff = LocalTime.of(12, 50);
LocalTime landing = LocalTime.of(16, 20);
Duration flightTime = Duration.between(
ZonedDateTime.of(date, takeoff, LHR),
ZonedDateTime.of(date, landing, SFO));
System.out.println("Flight time: " + flightTime);
}
Flight time:
PT11H30M
ISO BY DEFAULT
NO MORE
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
void formatting()
{
DateTimeFormatter.ISO_DATE.
format(LocalDateTime.of(2013, 9, 22, 10, 03));
DateTimeFormatter.ISO_DATE_TIME.
format(LocalDateTime.of(2013, 9, 22, 10, 30));
}
void formatting()
{
DateTimeFormatter.ISO_DATE.
format(LocalDateTime.of(2013, 9, 22, 10, 03));
DateTimeFormatter.ISO_DATE_TIME.
format(LocalDateTime.of(2013, 9, 22, 10, 30));
}
2013-09-22
void formatting()
{
DateTimeFormatter.ISO_DATE.
format(LocalDateTime.of(2013, 9, 22, 10, 03));
DateTimeFormatter.ISO_DATE_TIME.
format(LocalDateTime.of(2013, 9, 22, 10, 30));
}
2013-09-22
2013-09-22T10:30:00
void formatterError()
{
ISO_DATE_TIME.format(LocalDate.of(2013, 9, 22));
/*
Exception in thread "main"
java.time.temporal.UnsupportedTemporalTypeException: Unsupported
field: HourOfDay
! at java.time.LocalDate.get0(LocalDate.java:670)
! at java.time.LocalDate.getLong(LocalDate.java:649)
! at
java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.ja
va:297)
! (..)!
*/
}
TUTORIAL
http://docs.oracle.com/javase/tutorial/datetime/index.html
API
ENHANCEMENTS
BETTER IO
void betterIO()
{
BufferedReader bufferedReader;
Path path;
Stream<String> lines = bufferedReader.lines();
Stream<String> lines = Files.lines(Path, Charset);
Stream<Path> paths = Files.list(Path);
Stream<Path> paths = Files.find(Path, depth, BiPredicate,
FileVisitOption...)
Stream<Path> paths = Files.walk(Path, depth, FileVisitOption...)
Stream<Path> paths = Files.walk(Path, FileVisitOption...)
DirectoryStream.stream()
}
MAPS
compute()
{
map.compute(aKey, new BiFunction<Key, Value, Value>() {
@Override
public Value apply(Key key, Value value)
{
// ...
}
});
map.computeIfAbsent(aKey, new Function<Key, Value>() {
@Override
public Value apply(Key key)
{
// ...
}
});
map.computeIfPresent(aKey, new BiFunction<Key, Value, Value>() {
@Override
public Value apply(Key key, Value value)
{
// ...
}
});
}
void computeWithLambdas()
{
Map<Key, Value> map = // ...
map.computeIfAbsent(aKey, key -> {
// ...
});
map.computeIfPresent(aKey, (key, value) -> {
// ...
});
}
void moreMaps()
{
Map<Key, Value> map = null;
map.putIfAbsent(K, V);
map.remove(Object, Object);
map.replace(K, V);
// Compare and swap
map.replace(K, V1, V2);
map.replaceAll(BiFunction);
map.getOrDefault(K, V);
map.merge(K, V, BiFunction)
}
[5, 8, 6, 7, 2, 1, 4, 3]
void parallelSetAll()
{
int[] array = new int[8];
AtomicInteger i = new AtomicInteger();
Arrays.parallelSetAll(array, operand -> i.incrementAndGet());
}
void parallelPrefix()
{
int[] array = { 1, 2, 4, 8 };
Arrays.parallelPrefix(array, (left, right) -> {
return left + right;
});
}
LAMBDAS?
LAMBDAS!
(finally)
LAMBDAS
Notable inspirations would be:
Scala
Groovy
Lisps
.NOT (!)
() -> {}
LAMBDAS
LAMBDAS
(Thing t) -> {}
LAMBDAS
LAMBDAS
(Thing t) -> {}
LAMBDAS
(Thing t) -> {}
(Thing t, More m) -> {}
LAMBDAS &TYPES
LAMBDAS &TYPES
GetNum _ = (t) -> {42}
LAMBDAS &TYPES
GetNum _ = (t) -> {42}
GetNum _ = (t) -> 42
LAMBDAS &TYPES
GetNum _ = (t) -> {42}
GetNum _ = (t) -> 42
GetNum _ = t -> 1337
interface Adder {
void add(int a, int b);
}
TARGETTYPING
interface Adder {
void add(int a, int b);
}
TARGETTYPING
Adder function = (int a, int b) -> { a + b };
interface Adder {
void add(int a, int b);
}
TARGETTYPING
Adder function = (int a, int b) -> { a + b };
interface Adder {
void add(int a, int b);
}
TARGETTYPING
Adder function = (int a, int b) -> { a + b };
(int, int) => int
gets converted into target type:
Adder
interface Adder {
void add(int a, int b);
}
TARGETTYPING
Adder function = (int a, int b) -> { a + b };
// or shorter:
Adder function = (a, b) -> a + b;
interface Adder {
void add(int a, int b);
}
TARGETTYPING
Adder function = (int a, int b) -> { a + b };
// or shorter:
Adder function = (a, b) -> a + b;
You can skip the ; sign!
interface Adder {
void add(int a, int b);
}
TARGETTYPING
Adder function = (int a, int b) -> { a + b };
// or shorter:
Adder function = (a, b) -> a + b;
You can skip { } sometimes
You can skip the ; sign!
interface Adder {
void add(int a, int b);
}
TARGETTYPING
Adder function = (int a, int b) -> { a + b };
// or shorter:
Adder function = (a, b) -> a + b;
You can skip { } sometimes
You can skip the ; sign!
and the types are inferred!
FUNCTIONAL INTERFACES
interface Adder {
void add(int a, int b);
}
FUNCTIONAL INTERFACES
@FunctionalInterface
interface Adder {
void add(int a, int b);
}
FUNCTIONAL INTERFACES
@FunctionalInterface
interface Adder {
void add(int a, int b);
}
Similar to @Override:
* not required,
* checks our intent.
FUNCTIONAL INTERFACES
@FunctionalInterface
interface Adder {
void add(int a, int b);
void wat();
}
FUNCTIONAL INTERFACES
@FunctionalInterface
interface Adder {
void add(int a, int b);
void wat();
}
java: Unexpected @FunctionalInterface annotation
pl.project13.lambda.test.examples.Adder is not a functional interface
multiple non-overriding abstract methods found in interface
pl.project13.lambda.test.examples.Adder
DEFAULT METHODS
@FunctionalInterface
interface Adder {
void add(int a, int b);
default void wat() { /* nothing... */ }
}
OK!
Only 1 abstract method.
DEFAULT METHODS
@FunctionalInterface
interface Adder {
default int add(int a, int b) { return a + b; }
}
@FunctionalInterface
interface Divider {
default double divide(int a, int b) { return a / b; }
}
class Calculator implements Adder, Divider {
public double calc(int a, int b, int c) {
return divide(add(a, b), c);
}
}
DEFAULT METHODS
We mixed in methods!
here! and here!
@FunctionalInterface
interface Adder {
default int add(int a, int b) { return a + b; }
}
@FunctionalInterface
interface Divider {
default double divide(int a, int b) { return a / b; }
}
class Calculator implements Adder, Divider {
public double calc(int a, int b, int c) {
return divide(add(a, b), c);
}
}
interface A {
default void doIt() { /* A */ }
}
interface B {
default void doIt() { /* B */ }
}
class Thing implements A, B {
}
DEFAULT METHODS
interface A {
default void doIt() { /* A */ }
}
interface B {
default void doIt() { /* B */ }
}
class Thing implements A, B {
}
DEFAULT METHODS
java: class com.javaone.Thing inherits unrelated defaults for doIt()
from types com.javaone.A and com.javaone.B
DEFAULT METHODS
interface A {
default void doIt() { /* A */ }
}
interface B {
default void doIt() { /* B */ }
}
class Thing implements A, B {
@Override
public void doIt() {
A.super.doIt();
}
}
Resolve ambiguity manually!
DEFAULT METHODS
interface A {
default void doIt() { /* A */ }
}
interface B {
default void doIt() { /* B */ }
}
class Thing implements A, B {
@Override
public void doIt() {
A.super.doIt();
}
}
Resolve ambiguity manually!
DEFAULT IN ITERABLE
package java.lang;
@FunctionalInterface
public interface Iterable<T> {
Iterator<T> iterator();
/** @since 1.8 */
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
void withoutLambda()
{
button.addActionListener(new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("example");
}
});
}
λ IN ACTION
BEFORE LAMBDAS
in IntelliJ
void withLambda()
{
button.addActionListener((e) ->
{
System.out.println("example");
});
}
λ IN ACTION
void composingFunctions()
{
// given
Function<Integer, Integer> timesTwo = n -> n * 2;
Function<Integer, Integer> plusOne = n -> n + 1;
// when
Function<Integer, Integer> multiplyThenAdd =
timesTwo.andThen(plusOne);
// equivalent to
Function<Integer, Integer> multiplyThenAdd =
plusOne.compose(timesTwo);
// then
int result = multiplyThenAdd.apply(1);
assertThat(result).isEqualTo(3);
}
REMOVING BOILERPLATE
STREAMS
void transform()
{
Iterables.transform(
newArrayList(1, 2, 3),
new Function<Integer, String>()
{
@Override
public String apply(Integer input)
{
return input.toString();
}
});
}
void transform()
{
Iterables.transform(
newArrayList(1, 2, 3),
new Function<Integer, String>()
{
@Override
public String apply(Integer input)
{
return input.toString();
}
});
}
void noMoreTransform()
{
items.stream().map(i -> i.toString());
}
vs
items.stream().map(Item::getName);
compared to Scala
items map { _.getName }
items.stream().map(Item::getName);
yay, we’re cool now!
compared to Scala
items map { _.getName }
STREAMS
items.stream().
filter(predicate);
map(mapper);
mapToInt(mapper);
flatMap(mapper);
distinct();
sorted();
sorted(comparator);
peek(consumer);
limit(maxSize);
forEach(func);
INTERNAL ITERATION
void internalIteration()
{
List<Thing> things = ...;
things.forEach(System.out::println);
}
PARALLELIZE?
PARALLEL ITERATION
void parallelIteration()
{
List<Thing> things = ...;
things.parallelStream().forEach(System.out::println);
}
STREAMS ARE LAZY!
List<Integer> is = newArrayList(1, 2, 3);
is.stream()
.map(a -> printAndReturn("A", a))
.map(a -> printAndReturn("B", a));
STREAMS ARE LAZY
List<Integer> is = newArrayList(1, 2, 3);
is.stream()
.map(a -> printAndReturn("A", a))
.map(a -> printAndReturn("B", a));
Prints:
STREAMS ARE LAZY
List<Integer> is = newArrayList(1, 2, 3);
is.stream()
.map(a -> printAndReturn("A", a))
.map(a -> printAndReturn("B", a));
Prints:
STREAMS ARE LAZY
Nothing!
STREAMS ARE LAZY
List<Integer> is = newArrayList(1, 2, 3);
is.stream()
.map(a -> printAndReturn("A", a))
.map(a -> printAndReturn("B", a))
.collect(toList());
STREAMS ARE LAZY
List<Integer> is = newArrayList(1, 2, 3);
is.stream()
.map(a -> printAndReturn("A", a))
.map(a -> printAndReturn("B", a))
.collect(toList());
Prints:
A1
B1
A2
B2
A3
B3
STREAMS ARE LAZY
List<Integer> is = newArrayList(1, 2, 3);
is.stream()
.map(a -> printAndReturn("A", a))
.map(a -> printAndReturn("B", a))
.collect(toList());
Prints:
A1
B1
A2
B2
A3
B3
It’s ONE iteration!
METHOD HANDLES
think function pointers
KEEPING REFERENCES
??? method = Person::getName
class Person {
String getName();
}
?
KEEPING REFERENCES
Supplier<String> method = Person::getName
@FunctionalInterface
public interface Supplier<T> {
T get();
}
class Person {
String getName();
}
void referringToMethods()
{
String name = Person.getName();
String name = applyTo(heinz, Person::getName);
}
REFERRINGTO METHODS
String normalName = heinz.getName();
String magicName = applyTo(heinz, Person::getName);
public <T, R> R applyTo(T obj, Function<T, R> function) {
return function.apply(obj);
}
JAVA.UTIL.FUNCTION.*
Supplier<T>
=> T
Consumer<T>
T => void
Predicate<T>
T => Boolean
BiPredicate<T1, T2>
(T1, T2) => Boolean
Function<T, R>
T => R
BiFunction<T1, T2, R>
(T1, T2) => R
and more...!
Fact: in order to refer to:
String doThing(String a, String b, String c, Integer d);
JAVA.UTIL.FUNCTION.*
Fact: in order to refer to:
String doThing(String a, String b, String c, Integer d);
you have to:
@FunctionalInterface
interface Function4<T1, T2, T3, T4, R> {
R apply(T1 a, T2 b, T3 c, T4 d);
}
JAVA.UTIL.FUNCTION.*
Fact: in order to refer to:
String doThing(String a, String b, String c, Integer d);
you have to:
@FunctionalInterface
interface Function4<T1, T2, T3, T4, R> {
R apply(T1 a, T2 b, T3 c, T4 d);
}
Function4<String, String, String, Integer, String> fun =
Example::doThing;
JAVA.UTIL.FUNCTION.*
BACKTOTHE FUTURE!
● http://cr.openjdk.java.net/~briangoetz/
lambda/collections-overview.html
● http://docs.oracle.com/javase/tutorial/java/javaOO/
lambdaexpressions.html
● http://www.techempower.com/blog/2013/03/26/
everything-about-java-8/
● For fun, Lambda Spec:
github.com/ktoso/lambda-spec
THANKYOU!
@ags313
Andrzej Grzesik Konrad Malawski
@ktosopl
TWEET PLEASE!

Mais conteúdo relacionado

Mais procurados

Functional Programming in Java 8 - Exploiting Lambdas
Functional Programming in Java 8 - Exploiting LambdasFunctional Programming in Java 8 - Exploiting Lambdas
Functional Programming in Java 8 - Exploiting LambdasGanesh Samarthyam
 
Java 8 lambda expressions
Java 8 lambda expressionsJava 8 lambda expressions
Java 8 lambda expressionsLogan Chien
 
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
 
Functional Java 8 in everyday life
Functional Java 8 in everyday lifeFunctional Java 8 in everyday life
Functional Java 8 in everyday lifeAndrea Iacono
 
Functional Thinking - Programming with Lambdas in Java 8
Functional Thinking - Programming with Lambdas in Java 8Functional Thinking - Programming with Lambdas in Java 8
Functional Thinking - Programming with Lambdas in Java 8Ganesh Samarthyam
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsNewCircle Training
 
Lambda Expressions in Java
Lambda Expressions in JavaLambda Expressions in Java
Lambda Expressions in JavaErhan Bagdemir
 
Programming with Lambda Expressions in Java
Programming with Lambda Expressions in Java Programming with Lambda Expressions in Java
Programming with Lambda Expressions in Java langer4711
 

Mais procurados (20)

Functional Programming in Java 8 - Exploiting Lambdas
Functional Programming in Java 8 - Exploiting LambdasFunctional Programming in Java 8 - Exploiting Lambdas
Functional Programming in Java 8 - Exploiting Lambdas
 
Java Class Design
Java Class DesignJava Class Design
Java Class Design
 
Java 8 lambda expressions
Java 8 lambda expressionsJava 8 lambda expressions
Java 8 lambda expressions
 
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
 
Functional Java 8 in everyday life
Functional Java 8 in everyday lifeFunctional Java 8 in everyday life
Functional Java 8 in everyday life
 
Java 8 Lambda and Streams
Java 8 Lambda and StreamsJava 8 Lambda and Streams
Java 8 Lambda and Streams
 
Java8 features
Java8 featuresJava8 features
Java8 features
 
Java concurrency questions and answers
Java concurrency questions and answers Java concurrency questions and answers
Java concurrency questions and answers
 
Java 8 streams
Java 8 streamsJava 8 streams
Java 8 streams
 
Java 8 features
Java 8 featuresJava 8 features
Java 8 features
 
Functional Thinking - Programming with Lambdas in Java 8
Functional Thinking - Programming with Lambdas in Java 8Functional Thinking - Programming with Lambdas in Java 8
Functional Thinking - Programming with Lambdas in Java 8
 
Streams in Java 8
Streams in Java 8Streams in Java 8
Streams in Java 8
 
Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & Streams
 
Lambdas and Laughs
Lambdas and LaughsLambdas and Laughs
Lambdas and Laughs
 
Lambda Expressions in Java
Lambda Expressions in JavaLambda Expressions in Java
Lambda Expressions in Java
 
Core Java - Quiz Questions - Bug Hunt
Core Java - Quiz Questions - Bug HuntCore Java - Quiz Questions - Bug Hunt
Core Java - Quiz Questions - Bug Hunt
 
Programming with Lambda Expressions in Java
Programming with Lambda Expressions in Java Programming with Lambda Expressions in Java
Programming with Lambda Expressions in Java
 
Java 8 Streams
Java 8 StreamsJava 8 Streams
Java 8 Streams
 
Java programming-examples
Java programming-examplesJava programming-examples
Java programming-examples
 

Destaque

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
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJosé Paumard
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8LivePerson
 
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas característicasFernando Petrola
 
Java 8 - Features Overview
Java 8 - Features OverviewJava 8 - Features Overview
Java 8 - Features OverviewSergii Stets
 
2013 04 20 SpaceApp challenge kraków
2013 04 20 SpaceApp challenge kraków2013 04 20 SpaceApp challenge kraków
2013 04 20 SpaceApp challenge krakówKatarzyna Mrowca
 
"Z IT na nasze" - czyli na czym polega praca Analityka IT. (Wersja plus size :))
"Z IT na nasze" - czyli na czym polega praca Analityka IT. (Wersja plus size :))"Z IT na nasze" - czyli na czym polega praca Analityka IT. (Wersja plus size :))
"Z IT na nasze" - czyli na czym polega praca Analityka IT. (Wersja plus size :))Katarzyna Mrowca
 
What's new in Java 8
What's new in Java 8What's new in Java 8
What's new in Java 8jclingan
 
whats new in java 8
whats new in java 8 whats new in java 8
whats new in java 8 Dori Waldman
 
TDC 2015 - Java: from old school to modern art!
TDC 2015 - Java: from old school to modern art!TDC 2015 - Java: from old school to modern art!
TDC 2015 - Java: from old school to modern art!Marcos Ferreira
 
Game Analytics: A Practitioner’s Perspective
Game Analytics: A Practitioner’s PerspectiveGame Analytics: A Practitioner’s Perspective
Game Analytics: A Practitioner’s PerspectiveDecimus
 
From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()José Paumard
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.David Gómez García
 
JDK8 : parallel programming made (too ?) easy
JDK8 : parallel programming made (too ?) easyJDK8 : parallel programming made (too ?) easy
JDK8 : parallel programming made (too ?) easyJosé Paumard
 
Design - The first user test
Design - The first user testDesign - The first user test
Design - The first user testJessica Engström
 
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Editionfrom old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition心 谷本
 
50 new things you can do with java 8
50 new things you can do with java 850 new things you can do with java 8
50 new things you can do with java 8José Paumard
 

Destaque (20)

Java 8 Features
Java 8 FeaturesJava 8 Features
Java 8 Features
 
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
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelization
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
 
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas características
 
Java 8 - Features Overview
Java 8 - Features OverviewJava 8 - Features Overview
Java 8 - Features Overview
 
2013 04 20 SpaceApp challenge kraków
2013 04 20 SpaceApp challenge kraków2013 04 20 SpaceApp challenge kraków
2013 04 20 SpaceApp challenge kraków
 
Confitura 2013
Confitura 2013Confitura 2013
Confitura 2013
 
"Z IT na nasze" - czyli na czym polega praca Analityka IT. (Wersja plus size :))
"Z IT na nasze" - czyli na czym polega praca Analityka IT. (Wersja plus size :))"Z IT na nasze" - czyli na czym polega praca Analityka IT. (Wersja plus size :))
"Z IT na nasze" - czyli na czym polega praca Analityka IT. (Wersja plus size :))
 
What's new in Java 8
What's new in Java 8What's new in Java 8
What's new in Java 8
 
whats new in java 8
whats new in java 8 whats new in java 8
whats new in java 8
 
TDC 2015 - Java: from old school to modern art!
TDC 2015 - Java: from old school to modern art!TDC 2015 - Java: from old school to modern art!
TDC 2015 - Java: from old school to modern art!
 
Game Analytics: A Practitioner’s Perspective
Game Analytics: A Practitioner’s PerspectiveGame Analytics: A Practitioner’s Perspective
Game Analytics: A Practitioner’s Perspective
 
From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
 
JDK8 : parallel programming made (too ?) easy
JDK8 : parallel programming made (too ?) easyJDK8 : parallel programming made (too ?) easy
JDK8 : parallel programming made (too ?) easy
 
Design - The first user test
Design - The first user testDesign - The first user test
Design - The first user test
 
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Editionfrom old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
 
Java 8 Workshop
Java 8 WorkshopJava 8 Workshop
Java 8 Workshop
 
50 new things you can do with java 8
50 new things you can do with java 850 new things you can do with java 8
50 new things you can do with java 8
 

Semelhante a Java 8: the good parts!

InterConnect: Java, Node.js and Swift - Which, Why and When
InterConnect: Java, Node.js and Swift - Which, Why and WhenInterConnect: Java, Node.js and Swift - Which, Why and When
InterConnect: Java, Node.js and Swift - Which, Why and WhenChris Bailey
 
Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.Peter Higgins
 
MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know Norberto Leite
 
Mongo+java (1)
Mongo+java (1)Mongo+java (1)
Mongo+java (1)MongoDB
 
CouchDB on Android
CouchDB on AndroidCouchDB on Android
CouchDB on AndroidSven Haiges
 
EcmaScript 6 - The future is here
EcmaScript 6 - The future is hereEcmaScript 6 - The future is here
EcmaScript 6 - The future is hereSebastiano Armeli
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoMatt Stine
 
InterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.jsInterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.jsChris Bailey
 
GoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDDGoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDDBartłomiej Kiełbasa
 
Effecient javascript
Effecient javascriptEffecient javascript
Effecient javascriptmpnkhan
 
Desarrollo para Android con Groovy
Desarrollo para Android con GroovyDesarrollo para Android con Groovy
Desarrollo para Android con GroovySoftware Guru
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with SpringJoshua Long
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentationipolevoy
 
Diseño y Desarrollo de APIs
Diseño y Desarrollo de APIsDiseño y Desarrollo de APIs
Diseño y Desarrollo de APIsRaúl Neis
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code lessAnton Novikau
 
SQLite Techniques
SQLite TechniquesSQLite Techniques
SQLite Techniquesjoaopmaia
 
Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Guillaume Laforge
 

Semelhante a Java 8: the good parts! (20)

InterConnect: Java, Node.js and Swift - Which, Why and When
InterConnect: Java, Node.js and Swift - Which, Why and WhenInterConnect: Java, Node.js and Swift - Which, Why and When
InterConnect: Java, Node.js and Swift - Which, Why and When
 
Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.
 
MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know
 
Mongo+java (1)
Mongo+java (1)Mongo+java (1)
Mongo+java (1)
 
CouchDB on Android
CouchDB on AndroidCouchDB on Android
CouchDB on Android
 
EcmaScript 6 - The future is here
EcmaScript 6 - The future is hereEcmaScript 6 - The future is here
EcmaScript 6 - The future is here
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to Go
 
InterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.jsInterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.js
 
GoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDDGoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDD
 
"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues
 
Effecient javascript
Effecient javascriptEffecient javascript
Effecient javascript
 
Having Fun with Play
Having Fun with PlayHaving Fun with Play
Having Fun with Play
 
Desarrollo para Android con Groovy
Desarrollo para Android con GroovyDesarrollo para Android con Groovy
Desarrollo para Android con Groovy
 
SQLite Techniques
SQLite TechniquesSQLite Techniques
SQLite Techniques
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
 
Diseño y Desarrollo de APIs
Diseño y Desarrollo de APIsDiseño y Desarrollo de APIs
Diseño y Desarrollo de APIs
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code less
 
SQLite Techniques
SQLite TechniquesSQLite Techniques
SQLite Techniques
 
Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008
 

Mais de Andrzej Grzesik

Mais de Andrzej Grzesik (10)

JDK, the not so hidden treasures
JDK, the not so hidden treasuresJDK, the not so hidden treasures
JDK, the not so hidden treasures
 
The path to Repeatable Builds
The path to Repeatable BuildsThe path to Repeatable Builds
The path to Repeatable Builds
 
JDK not so hidden treasures
JDK not so hidden treasuresJDK not so hidden treasures
JDK not so hidden treasures
 
Go, the one language to learn in 2014
Go, the one language to learn in 2014Go, the one language to learn in 2014
Go, the one language to learn in 2014
 
Cheffing a department
Cheffing a departmentCheffing a department
Cheffing a department
 
Continuous Delivery Antipatterns
Continuous Delivery AntipatternsContinuous Delivery Antipatterns
Continuous Delivery Antipatterns
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
Git
GitGit
Git
 
Continous delivery
Continous deliveryContinous delivery
Continous delivery
 
Hbase jdd
Hbase jddHbase jdd
Hbase jdd
 

Último

Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 

Último (20)

Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

Java 8: the good parts!