17

Lambdas And Streams Hands On Lab, JavaOne 2014

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Lambdas And Streams Hands On Lab, JavaOne 2014
Page 2: Lambdas And Streams Hands On Lab, JavaOne 2014

Lambdas & Streams Laboratory

Stuart MarksSimon RitterAngela Caicedo

Oracle Corp.

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Page 3: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.3

Lambdas and FunctionsLibrary Review

Page 4: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.4

Lambda Expressions

Lambda expression is an anonymous function Think of it like a method

– But not associated with a class

Can be used wherever you would use an anonymous inner class– Single abstract method type

Syntax– ([optional-parameters]) -> body

Types can be inferred (parameters and return type)

Page 5: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.5

Lambda ExamplesSomeList<Student> students = ...

double highestScore =

students.stream().

filter(Student s -> s.getGradYear() == 2011).

map(Student s -> s.getScore()).

max();

Page 6: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.6

Method References

• Method references let us reuse a method as a lambda expression

FileFilter x = (File f) -> f.canRead();

FileFilter x = File::canRead;

FileFilter x = new FileFilter() { public boolean accept(File f) { return f.canRead(); }};

Page 7: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.7

The Stream Class

Stream<T>– A sequence of elements supporting sequential and parallel operations

A Stream is opened by calling:– Collection.stream()

– Collection.parallelStream()

Many Stream methods return Stream objects– Very simple (and logical) method chaining

java.util.stream

Page 8: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.8

Stream Basics

Using a Stream means having three things A source

– Something that creates a Stream of objects

Zero or more intermediate objects– Take a Stream as input, produce a Stream as output

– Potentially modify the contents of the Stream (but don’t have to)

A terminal operation– Takes a Stream as input

– Consumes the Stream, or generates some other type of output

Page 9: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.9

Stream Usage

Multiple operations available– collect, filter, count, skip, limit, sorted

– map (and map to types, e.g. mapToInt)

– flatMap maps each element in a Stream to possibly multiple elements e.g. flatMap(line -> Stream.of(line.split(REGEXP));

List<String> names = Arrays.asList(“Bob”, “Alice”, “Charlie”);System.out.println(names. stream(). filter(e -> e.getLength() > 4). findFirst(). get());

Page 10: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.10

java.util.function Package

Predicate<T>– Determine if the input of type T matches some criteria

Consumer<T>– Accept a single input argumentof type T, and return no result

Function<T, R>– Apply a function to the input type T, generating a result of type R

Plus several more

Page 11: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.11

The iterable Interface

One method– forEach()

– The parameter is a Consumer

Used by most collections

wordList.forEach(s -> System.out.println(s));

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

Page 12: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.12

Files and Lines of Text

BufferedReader has new method– Stream<String> lines()

HINT: Test framework creates a BufferedReader for you

Page 13: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.13

Maps and FlatMapsMap Values in a Stream

Map

FlatMap

Input Stream

Input Stream

1 to 1 mapping

1 to many mapping

Output Stream

Output Stream

Page 14: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.14

Useful Stream Methods

collect (terminal) filter (intermediate) count (terminal) skip, limit (intermediate) max (terminal) getAsInt (terminal)

Page 15: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.15

Getting Started

Open the LambdasHOL project in NetBeans The exercises are configured as tests Edit the tests

– Remove the @Ignore annotation

Run the tests (Ctrl F6, or from the menu) Make the tests pass Simple!

Page 16: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.16

Let’s Go!

Page 17: Lambdas And Streams Hands On Lab, JavaOne 2014

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.17