Java 8: the good parts!

Andrzej Grzesik
Andrzej GrzesikSoftware Developer at ebay
START
MovieTime!
Java 8: the good parts!
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
Java 8: the good parts!
Java 8: the good parts!
YOU CAN HELP!
FIX
TEST
HACK
DOCUMENT
ADOPTOPENJDK.JAVA.NET
ADOPTAJSR.JAVA.NET
HOW DO I CHECK JDK8?
JDK8.JAVA.NET
IDE SUPPORT
Java 8: the good parts!
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!
1 of 121

Recommended

Refactoring to Java 8 (Devoxx BE) by
Refactoring to Java 8 (Devoxx BE)Refactoring to Java 8 (Devoxx BE)
Refactoring to Java 8 (Devoxx BE)Trisha Gee
78.9K views100 slides
Java 8 presentation by
Java 8 presentationJava 8 presentation
Java 8 presentationVan Huong
6.1K views63 slides
Java 8 Lambda Expressions by
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda ExpressionsScott Leberknight
12.1K views20 slides
Productive Programming in Java 8 - with Lambdas and Streams by
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
11.7K views93 slides
Java 8 Lambda Built-in Functional Interfaces by
Java 8 Lambda Built-in Functional InterfacesJava 8 Lambda Built-in Functional Interfaces
Java 8 Lambda Built-in Functional InterfacesGanesh Samarthyam
3.2K views32 slides
Java8 by
Java8Java8
Java8Felipe Mamud
4K views67 slides

More Related Content

What's hot

Functional Programming in Java 8 - Exploiting Lambdas by
Functional Programming in Java 8 - Exploiting LambdasFunctional Programming in Java 8 - Exploiting Lambdas
Functional Programming in Java 8 - Exploiting LambdasGanesh Samarthyam
584 views70 slides
Java Class Design by
Java Class DesignJava Class Design
Java Class DesignGanesh Samarthyam
6.1K views103 slides
Java 8 lambda expressions by
Java 8 lambda expressionsJava 8 lambda expressions
Java 8 lambda expressionsLogan Chien
2.6K views66 slides
Modern Programming in Java 8 - Lambdas, Streams and Date Time API by
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
9.4K views166 slides
Functional Java 8 in everyday life by
Functional Java 8 in everyday lifeFunctional Java 8 in everyday life
Functional Java 8 in everyday lifeAndrea Iacono
4K views66 slides
Java 8 Lambda and Streams by
Java 8 Lambda and StreamsJava 8 Lambda and Streams
Java 8 Lambda and StreamsVenkata Naga Ravi
3.9K views51 slides

What's hot(20)

Functional Programming in Java 8 - Exploiting Lambdas by Ganesh Samarthyam
Functional Programming in Java 8 - Exploiting LambdasFunctional Programming in Java 8 - Exploiting Lambdas
Functional Programming in Java 8 - Exploiting Lambdas
Ganesh Samarthyam584 views
Java 8 lambda expressions by Logan Chien
Java 8 lambda expressionsJava 8 lambda expressions
Java 8 lambda expressions
Logan Chien2.6K views
Modern Programming in Java 8 - Lambdas, Streams and Date Time API by Ganesh Samarthyam
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
Ganesh Samarthyam9.4K views
Functional Java 8 in everyday life by Andrea Iacono
Functional Java 8 in everyday lifeFunctional Java 8 in everyday life
Functional Java 8 in everyday life
Andrea Iacono4K views
Functional Thinking - Programming with Lambdas in Java 8 by Ganesh Samarthyam
Functional Thinking - Programming with Lambdas in Java 8Functional Thinking - Programming with Lambdas in Java 8
Functional Thinking - Programming with Lambdas in Java 8
Ganesh Samarthyam4.6K views
Lambda Expressions in Java by Erhan Bagdemir
Lambda Expressions in JavaLambda Expressions in Java
Lambda Expressions in Java
Erhan Bagdemir2.7K views
Programming with Lambda Expressions in Java by langer4711
Programming with Lambda Expressions in Java Programming with Lambda Expressions in Java
Programming with Lambda Expressions in Java
langer47112.3K views

Viewers also liked

Java 8 Features by
Java 8 FeaturesJava 8 Features
Java 8 FeaturesLeninkumar Koppoju
827 views29 slides
55 New Features in Java SE 8 by
55 New Features in Java SE 855 New Features in Java SE 8
55 New Features in Java SE 8Simon Ritter
38.2K views49 slides
Java 8, Streams & Collectors, patterns, performances and parallelization by
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJosé Paumard
57K views373 slides
Functional programming with Java 8 by
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8LivePerson
6.9K views76 slides
Java 8 - Nuevas características by
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas característicasFernando Petrola
1.7K views40 slides
Java 8 - Features Overview by
Java 8 - Features OverviewJava 8 - Features Overview
Java 8 - Features OverviewSergii Stets
1.6K views33 slides

Viewers also liked(20)

55 New Features in Java SE 8 by Simon Ritter
55 New Features in Java SE 855 New Features in Java SE 8
55 New Features in Java SE 8
Simon Ritter38.2K views
Java 8, Streams & Collectors, patterns, performances and parallelization by José Paumard
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelization
José Paumard57K views
Functional programming with Java 8 by LivePerson
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
LivePerson6.9K views
Java 8 - Features Overview by Sergii Stets
Java 8 - Features OverviewJava 8 - Features Overview
Java 8 - Features Overview
Sergii Stets1.6K views
2013 04 20 SpaceApp challenge kraków by Katarzyna Mrowca
2013 04 20 SpaceApp challenge kraków2013 04 20 SpaceApp challenge kraków
2013 04 20 SpaceApp challenge kraków
Katarzyna Mrowca1.8K views
"Z IT na nasze" - czyli na czym polega praca Analityka IT. (Wersja plus size :)) by Katarzyna 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 :))
Katarzyna Mrowca3.2K views
What's new in Java 8 by jclingan
What's new in Java 8What's new in Java 8
What's new in Java 8
jclingan855 views
whats new in java 8 by Dori Waldman
whats new in java 8 whats new in java 8
whats new in java 8
Dori Waldman535 views
TDC 2015 - Java: from old school to modern art! by Marcos Ferreira
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 Ferreira2.1K views
Game Analytics: A Practitioner’s Perspective by Decimus
Game Analytics: A Practitioner’s PerspectiveGame Analytics: A Practitioner’s Perspective
Game Analytics: A Practitioner’s Perspective
Decimus1.6K views
From Runnable and synchronized To atomically() and parallel() by José Paumard
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é Paumard5.5K views
Java 8 Stream API. A different way to process collections. by David Gómez García
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 by José Paumard
JDK8 : parallel programming made (too ?) easyJDK8 : parallel programming made (too ?) easy
JDK8 : parallel programming made (too ?) easy
José Paumard6.3K views
from old java to java8 - KanJava Edition by 心 谷本
from old java to java8 - KanJava Editionfrom old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本2.9K views
Java 8 Workshop by Mario Fusco
Java 8 WorkshopJava 8 Workshop
Java 8 Workshop
Mario Fusco7.4K views
50 new things you can do with java 8 by José Paumard
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
José Paumard16.7K views

Similar to Java 8: the good parts!

InterConnect: Java, Node.js and Swift - Which, Why and When by
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
884 views147 slides
Your Library Sucks, and why you should use it. by
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
3.3K views38 slides
Mongo+java (1) by
Mongo+java (1)Mongo+java (1)
Mongo+java (1)MongoDB
9.2K views78 slides
MongoDB + Java - Everything you need to know by
MongoDB + Java - Everything you need to know MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know Norberto Leite
14.3K views78 slides
CouchDB on Android by
CouchDB on AndroidCouchDB on Android
CouchDB on AndroidSven Haiges
5.4K views49 slides
EcmaScript 6 - The future is here by
EcmaScript 6 - The future is hereEcmaScript 6 - The future is here
EcmaScript 6 - The future is hereSebastiano Armeli
4.8K views75 slides

Similar to Java 8: the good parts!(20)

InterConnect: Java, Node.js and Swift - Which, Why and When by Chris Bailey
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
Chris Bailey884 views
Your Library Sucks, and why you should use it. by Peter Higgins
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 Higgins3.3K views
Mongo+java (1) by MongoDB
Mongo+java (1)Mongo+java (1)
Mongo+java (1)
MongoDB9.2K views
MongoDB + Java - Everything you need to know by Norberto Leite
MongoDB + Java - Everything you need to know MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know
Norberto Leite14.3K views
CouchDB on Android by Sven Haiges
CouchDB on AndroidCouchDB on Android
CouchDB on Android
Sven Haiges5.4K views
A Recovering Java Developer Learns to Go by Matt Stine
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to Go
Matt Stine13.8K views
InterConnect2016: WebApp Architectures with Java and Node.js by Chris Bailey
InterConnect2016: WebApp Architectures with Java and Node.jsInterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.js
Chris Bailey1K views
Effecient javascript by mpnkhan
Effecient javascriptEffecient javascript
Effecient javascript
mpnkhan899 views
Desarrollo para Android con Groovy by Software Guru
Desarrollo para Android con GroovyDesarrollo para Android con Groovy
Desarrollo para Android con Groovy
Software Guru925 views
REST APIs with Spring by Joshua Long
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
Joshua Long25.6K views
ActiveWeb: Chicago Java User Group Presentation by ipolevoy
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
ipolevoy2K views
Diseño y Desarrollo de APIs by Raúl Neis
Diseño y Desarrollo de APIsDiseño y Desarrollo de APIs
Diseño y Desarrollo de APIs
Raúl Neis153 views
How to code to code less by Anton Novikau
How to code to code lessHow to code to code less
How to code to code less
Anton Novikau483 views
SQLite Techniques by joaopmaia
SQLite TechniquesSQLite Techniques
SQLite Techniques
joaopmaia1.1K views

More from Andrzej Grzesik

JDK, the not so hidden treasures by
JDK, the not so hidden treasuresJDK, the not so hidden treasures
JDK, the not so hidden treasuresAndrzej Grzesik
1.6K views58 slides
The path to Repeatable Builds by
The path to Repeatable BuildsThe path to Repeatable Builds
The path to Repeatable BuildsAndrzej Grzesik
566 views45 slides
JDK not so hidden treasures by
JDK not so hidden treasuresJDK not so hidden treasures
JDK not so hidden treasuresAndrzej Grzesik
524 views34 slides
Go, the one language to learn in 2014 by
Go, the one language to learn in 2014Go, the one language to learn in 2014
Go, the one language to learn in 2014Andrzej Grzesik
1.2K views71 slides
Cheffing a department by
Cheffing a departmentCheffing a department
Cheffing a departmentAndrzej Grzesik
623 views95 slides
Continuous Delivery Antipatterns by
Continuous Delivery AntipatternsContinuous Delivery Antipatterns
Continuous Delivery AntipatternsAndrzej Grzesik
2.7K views148 slides

More from Andrzej Grzesik(10)

Recently uploaded

Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveNetwork Automation Forum
43 views35 slides
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ... by
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...ShapeBlue
61 views15 slides
MVP and prioritization.pdf by
MVP and prioritization.pdfMVP and prioritization.pdf
MVP and prioritization.pdfrahuldharwal141
37 views8 slides
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc
72 views29 slides
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...ShapeBlue
64 views20 slides
Data Integrity for Banking and Financial Services by
Data Integrity for Banking and Financial ServicesData Integrity for Banking and Financial Services
Data Integrity for Banking and Financial ServicesPrecisely
29 views26 slides

Recently uploaded(20)

Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ... by ShapeBlue
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
ShapeBlue61 views
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by TrustArc
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc72 views
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue64 views
Data Integrity for Banking and Financial Services by Precisely
Data Integrity for Banking and Financial ServicesData Integrity for Banking and Financial Services
Data Integrity for Banking and Financial Services
Precisely29 views
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
ShapeBlue70 views
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue60 views
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue by ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlueCloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
ShapeBlue26 views
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson126 views
Business Analyst Series 2023 - Week 4 Session 7 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7
DianaGray1042 views
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker48 views
Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ... by ShapeBlue
Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ...Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ...
Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ...
ShapeBlue55 views
"Surviving highload with Node.js", Andrii Shumada by Fwdays
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada
Fwdays33 views
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue by ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
ShapeBlue62 views
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn26 views
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De... by Moses Kemibaro
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...
Moses Kemibaro27 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu28 views

Java 8: the good parts!