+ All Categories
Home > Engineering > Java 8 - An Introduction by Jason Swartz

Java 8 - An Introduction by Jason Swartz

Date post: 05-Apr-2017
Category:
Upload: jason-swartz
View: 243 times
Download: 4 times
Share this document with a friend
51
Java 8 An Introduction by Jason Swartz
Transcript
Page 1: Java 8 - An Introduction by Jason Swartz

Java 8

An Introduction byJason Swartz

Page 2: Java 8 - An Introduction by Jason Swartz

Agenda

1. Lambda Expressions2. Streaming Collections3. Monadic Collections

Page 3: Java 8 - An Introduction by Jason Swartz

1. Lambda Expressions

Page 4: Java 8 - An Introduction by Jason Swartz

Math Function

f(x) = x * x

Page 5: Java 8 - An Introduction by Jason Swartz

Java Function

int sqr(int x) { return x * x; }

Page 6: Java 8 - An Introduction by Jason Swartz

Anonymous Function

x -> x * x

Page 7: Java 8 - An Introduction by Jason Swartz

Java Anonymous Function

x -> x * x

Page 8: Java 8 - An Introduction by Jason Swartz

Java Anonymous Function

(x) -> x * x

Page 9: Java 8 - An Introduction by Jason Swartz

Java Anonymous Function

(x, y) -> x + y

Page 10: Java 8 - An Introduction by Jason Swartz

Java Anonymous Function

() -> 42

Page 11: Java 8 - An Introduction by Jason Swartz

Java Anonymous Function

f = x -> x * x;int y = f.apply(5);

Page 12: Java 8 - An Introduction by Jason Swartz

Java Anonymous Function

f = (x, y) -> x + y;int y = f.applyAsInt(5, 7);

Page 13: Java 8 - An Introduction by Jason Swartz

Java Anonymous Function

r = () -> { System.out.println("Hello");};r.run();

Page 14: Java 8 - An Introduction by Jason Swartz

Java Method Reference

c = System.out::println;c.accept("Hello");

Page 15: Java 8 - An Introduction by Jason Swartz

Now You Know Lambdas

Page 16: Java 8 - An Introduction by Jason Swartz

2. Streaming Collections

Page 17: Java 8 - An Introduction by Jason Swartz

Doubling Items In A List

List<Integer> nums = Arrays .asList(1, 2, 3);

int sqr(int x) { return x * x; }

Page 18: Java 8 - An Introduction by Jason Swartz

Doubling Items In A List

nums2 = new ArrayList<Integer>();for (int i : nums) { nums2.add(sqr(i));}

Page 19: Java 8 - An Introduction by Jason Swartz

Doubling Items In A List

nums.stream()

Page 20: Java 8 - An Introduction by Jason Swartz

Doubling Items In A List

nums.stream() .map(this::sqr)

Page 21: Java 8 - An Introduction by Jason Swartz

Doubling Items In A List

nums = nums.stream() .map(this::sqr) .collect(Collectors.toList());

Page 22: Java 8 - An Introduction by Jason Swartz

Doubling Items In A List

nums = nums.stream() .map(x -> x * x) .collect(Collectors.toList());

Page 23: Java 8 - An Introduction by Jason Swartz

Doubling Items In A List

nums = nums.parallelStream() .map(x -> x * x) .collect(Collectors.toList());

Page 24: Java 8 - An Introduction by Jason Swartz

Doubling Items In A List

nums = nums.clusterStream() .map(x -> x * x) .collect(Collectors.toList());

Page 25: Java 8 - An Introduction by Jason Swartz

Doubling Items In A List

nums = nums.dataCenterStream() .map(x -> x * x) .collect(Collectors.toList());

Page 26: Java 8 - An Introduction by Jason Swartz

Welcome toDeclarativeProgramming

Page 27: Java 8 - An Introduction by Jason Swartz

Mapping To A List of Lists

nums.stream() .map(x -> Arrays.list(x, x * x)) .collect(Collectors.toList());

Page 28: Java 8 - An Introduction by Jason Swartz

Flatmap That List

nums = nums.stream() .flatMap(x -> Arrays.list(x, x * x)) .collect(Collectors.toList());

Page 29: Java 8 - An Introduction by Jason Swartz

Filtering Items In A List

nums = nums.stream() .filter(x -> x % 2 == 0) .collect(Collectors.toList());

Page 30: Java 8 - An Introduction by Jason Swartz

Reducing A List

sum = nums.stream() .reduce((a,i) -> a + i) .get();

Page 31: Java 8 - An Introduction by Jason Swartz

In Summary

sum = nums.stream() .map(x -> x * x) .flatMap(x -> Arrays.list(x, x * x)) .filter(x -> x % 2 == 0) .reduce((a,i) -> a + i) .get();

Page 32: Java 8 - An Introduction by Jason Swartz

map()

flatmap()reduce()

filter()

Page 33: Java 8 - An Introduction by Jason Swartz

Now You Know Streams

Page 34: Java 8 - An Introduction by Jason Swartz

3. Monadic Collections

Page 35: Java 8 - An Introduction by Jason Swartz

Have you done this?

User u = getUser(“Fred”);String name = u.getName();

Exception in thread "main" java.lang.NullPointerException

Page 36: Java 8 - An Introduction by Jason Swartz

Null values stink

Page 37: Java 8 - An Introduction by Jason Swartz

Use Optional<T>, not null

Optional<User> u = getUser("Fred");if (! u.isPresent()) return;

String name = u.get().name;

Page 38: Java 8 - An Introduction by Jason Swartz

Use Optional<T>, not null

Optional<User> u = getUser("Fred");Optional<String> name = u .map(user -> user.name);

Page 39: Java 8 - An Introduction by Jason Swartz

Another Example

Page 40: Java 8 - An Introduction by Jason Swartz

Checking a user name

User u = getUser(“Fred”);Boolean result = null;if (u != null) Result = checkName(u.getName());else Result = false;

Page 41: Java 8 - An Introduction by Jason Swartz

Checking a user name

Optional<User> u = getUser("Fred");Boolean result;if (u.isPresent()) result = confirmName(u.get().name);else result = false;

Page 42: Java 8 - An Introduction by Jason Swartz

Confirming a user name with map()

Boolean result = getUser("Fred") .map(u -> u.name) .map(this::confirmName) .orElse(false);

Page 43: Java 8 - An Introduction by Jason Swartz

Optional is just a monad, a monoid in the category of endofunctors. What’s the problem?

Page 44: Java 8 - An Introduction by Jason Swartz

Optional is just a monad, a monoid in the category of endofunctors. What’s the problem?

Page 45: Java 8 - An Introduction by Jason Swartz

Optional is a zero- or one-sized collection that helps you cleanly handle missing values.

Page 46: Java 8 - An Introduction by Jason Swartz

More Monadic Collections?

Page 47: Java 8 - An Introduction by Jason Swartz

CompletableFuture is a zero- or one-sized collection that helps you cleanly handle future values.

Page 48: Java 8 - An Introduction by Jason Swartz

Javaslang’s Try is a zero- or one-sized collection that helps you cleanly handle exception-thrown values.

Page 49: Java 8 - An Introduction by Jason Swartz

Javaslang’s Lazy is a zero- or one-sized collection that helps you cleanly postpone calculating values.

Page 50: Java 8 - An Introduction by Jason Swartz

Now You KnowMonadic Collections

Page 51: Java 8 - An Introduction by Jason Swartz

Thanks For Watching!


Recommended