SlideShare a Scribd company logo
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!

More Related Content

What's hot

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
Ganesh Samarthyam
 
Java Class Design
Java Class DesignJava Class Design
Java Class Design
Ganesh Samarthyam
 
Java 8 lambda expressions
Java 8 lambda expressionsJava 8 lambda expressions
Java 8 lambda expressions
Logan 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 API
Ganesh Samarthyam
 
Functional Java 8 in everyday life
Functional Java 8 in everyday lifeFunctional Java 8 in everyday life
Functional Java 8 in everyday life
Andrea Iacono
 
Java 8 Lambda and Streams
Java 8 Lambda and StreamsJava 8 Lambda and Streams
Java 8 Lambda and Streams
Venkata Naga Ravi
 
Java8 features
Java8 featuresJava8 features
Java8 features
Elias Hasnat
 
Java concurrency questions and answers
Java concurrency questions and answers Java concurrency questions and answers
Java concurrency questions and answers
CodeOps Technologies LLP
 
Java 8 streams
Java 8 streamsJava 8 streams
Java 8 streams
Manav Prasad
 
Java 8 features
Java 8 featuresJava 8 features
Java 8 features
NexThoughts Technologies
 
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
Ganesh Samarthyam
 
Streams in Java 8
Streams in Java 8Streams in Java 8
Streams in Java 8
Tobias Coetzee
 
Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
Hyderabad Scalability Meetup
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & Streams
NewCircle Training
 
Lambdas and Laughs
Lambdas and LaughsLambdas and Laughs
Lambdas and Laughs
Jim Bethancourt
 
Lambda Expressions in Java
Lambda Expressions in JavaLambda Expressions in Java
Lambda Expressions in Java
Erhan Bagdemir
 
Core Java - Quiz Questions - Bug Hunt
Core Java - Quiz Questions - Bug HuntCore Java - Quiz Questions - Bug Hunt
Core Java - Quiz Questions - Bug Hunt
CodeOps Technologies LLP
 
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
 
Java 8 Streams
Java 8 StreamsJava 8 Streams
Java 8 Streams
Manvendra Singh
 

What's hot (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
 

Viewers also liked

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
Simon 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 parallelization
José Paumard
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
LivePerson
 
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas características
Fernando Petrola
 
Java 8 - Features Overview
Java 8 - Features OverviewJava 8 - Features Overview
Java 8 - Features Overview
Sergii 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ów
Katarzyna Mrowca
 
Confitura 2013
Confitura 2013Confitura 2013
Confitura 2013
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 :))
"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 8
jclingan
 
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 Perspective
Decimus
 
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 test
Jessica 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
心 谷本
 
Java 8 Workshop
Java 8 WorkshopJava 8 Workshop
Java 8 Workshop
Mario Fusco
 
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
José Paumard
 

Viewers also liked (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
 

Similar to 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 When
Chris 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 here
Sebastiano 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 Go
Matt 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.js
Chris Bailey
 
GoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDDGoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDD
Bartłomiej Kiełbasa
 
"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues"Javascript" por Tiago Rodrigues
Effecient javascript
Effecient javascriptEffecient javascript
Effecient javascript
mpnkhan
 
Desarrollo para Android con Groovy
Desarrollo para Android con GroovyDesarrollo para Android con Groovy
Desarrollo para Android con Groovy
Software Guru
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
Joshua Long
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
ipolevoy
 
Diseño y Desarrollo de APIs
Diseño y Desarrollo de APIsDiseño y Desarrollo de APIs
Diseño y Desarrollo de APIs
Raúl Neis
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code less
Anton Novikau
 
SQLite Techniques
SQLite TechniquesSQLite Techniques
SQLite Techniques
joaopmaia
 
Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008
Guillaume Laforge
 

Similar to 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
 

More from Andrzej Grzesik

JDK, the not so hidden treasures
JDK, the not so hidden treasuresJDK, the not so hidden treasures
JDK, the not so hidden treasures
Andrzej Grzesik
 
The path to Repeatable Builds
The path to Repeatable BuildsThe path to Repeatable Builds
The path to Repeatable Builds
Andrzej Grzesik
 
JDK not so hidden treasures
JDK not so hidden treasuresJDK not so hidden treasures
JDK not so hidden treasures
Andrzej Grzesik
 
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
Andrzej Grzesik
 
Continuous Delivery Antipatterns
Continuous Delivery AntipatternsContinuous Delivery Antipatterns
Continuous Delivery Antipatterns
Andrzej Grzesik
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
Andrzej Grzesik
 

More from 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
 

Recently uploaded

FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 

Recently uploaded (20)

FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 

Java 8: the good parts!