java 8 lambda expressions

20
Scott Leberknight Java 8 λ Expressions

Upload: scott-leberknight

Post on 10-May-2015

4.893 views

Category:

Technology


0 download

DESCRIPTION

Slides for a lightning talk on Java 8 lambda expressions I gave at the Near Infinity (www.nearinfinity.com) 2013 spring conference. The associated sample code is on GitHub at https://github.com/sleberknight/java8-lambda-samples

TRANSCRIPT

Page 1: Java 8 Lambda Expressions

Scott Leberknight

Java 8λ Expressions

Page 2: Java 8 Lambda Expressions

Mom, why?

Promote immutability

Declare what to do, not how to do it

Easier parallelization & lazy evaluation

Cleaner, more concise code

Page 3: Java 8 Lambda Expressions

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

numbers.forEach(new Consumer<Integer>() { @Override public void accept(Integer integer) { System.out.println(integer); }});

iterating w/ forEach(under the hood)

Page 4: Java 8 Lambda Expressions

lambda expressions

(argument list) -> code

(final String name, final int age) -> code

(name, age) -> code

name -> code

examples:

type inference

(String name, int age) -> code

}

λ

Page 5: Java 8 Lambda Expressions

iterating w/lambdas

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

numbers.forEach((final Integer value) -> System.out.println(value));

lambda expression

Page 6: Java 8 Lambda Expressions

iterating w/lambdas, type inference

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

numbers.forEach(value -> System.out.println(value));

Page 7: Java 8 Lambda Expressions

method references

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

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

method reference

Page 8: Java 8 Lambda Expressions

transforms using map

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

numbers.stream() .map(value -> value * 2) .forEach(System.out::println);

Page 9: Java 8 Lambda Expressions

filtering

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

numbers.stream() .filter(value -> value % 2 == 0) .forEach(System.out::println);

Page 10: Java 8 Lambda Expressions

filtering v2

List<String> names = Arrays.asList( "Bob", "Tom", "Jeff", "Scott", "Jennifer", "Steve");

final Function<String, Predicate<String>> startsWithLetter = letter -> name -> name.startsWith(letter);

names.stream() .filter(startsWithLetter.apply("J")) .forEach(System.out::println);

Page 11: Java 8 Lambda Expressions

Streams.iterate(1, number -> number + 1) .map(number -> number * number) .limit(25) .forEach(number -> System.out.print(number + " "));// 1 4 9 16 25 36 49 64 ... 529 576 625

Streams

Page 12: Java 8 Lambda Expressions

finding with Optional

List<String> names = Arrays.asList( "Bob", "Tom", "Jeff", "Scott", "Jennifer", "Steve");

Optional<String> firstS = names.stream() .filter(name -> name.startsWith("S")) .findFirst();System.out.println(firstS.orElse("None found"));

Page 13: Java 8 Lambda Expressions

reducers

List<String> names = Arrays.asList( "Bob", "Tom", "Jeff", "Scott", "Jennifer", "Steve");

Optional<String> longestName = names.stream() .reduce((name1, name2) -> name1.length() >= name2.length() ? name1 : name2);

if (longestName.isPresent()) { System.out.println(longestName.get());}

Page 14: Java 8 Lambda Expressions

sum reducer

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

long sum = numbers.stream() .map(value -> value * value) .sum();

Page 15: Java 8 Lambda Expressions

parallelization

numbers.parallelStream() .filter(number -> isPerfect(number)) .forEach(System.out::println);

Page 16: Java 8 Lambda Expressions

how far we went in this short talk...

Page 17: Java 8 Lambda Expressions

http://pragprog.com/book/vsjava8/functional-programming-in-java

Page 18: Java 8 Lambda Expressions

http://jdk8.java.net/

JDK 8 Project

Page 19: Java 8 Lambda Expressions

sample code available at:

https://github.com/sleberknight/java8-lambda-samples

Page 20: Java 8 Lambda Expressions

My Infoscott dot leberknight at nearinfinity dot com

twitter.com/sleberknight www.sleberknight.com/blog

www.nearinfinity.com/blogs/scott_leberknight/all/

scott dot leberknight at gmail dot com