Functional Processing of Collections (Advanced) 6.0.

Slides:



Advertisements
Similar presentations
CS 355 – PROGRAMMING LANGUAGES Dr. X. Apply-to-all A functional form that takes a single function as a parameter and yields a list of values obtained.
Advertisements

Copyright © 2012 Pearson Education, Inc. Chapter 6 More Conditionals and Loops Java Software Solutions Foundations of Program Design Seventh Edition John.
Grouping Objects Arrays and for loops. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Fixed-Size Collections.
Iteration and Loop Statements Horstmann Chapter 7 Loop statements control repeated execution of a block of statements Each time the statements in the block.
Chapter 2: Algorithm Discovery and Design
Introducing Loop Statements Liang, pages Loop statements control repeated execution of a block of statements Each time the statements in the block.
Loops – While, Do, For Repetition Statements Introduction to Arrays
Grouping objects Collections and iterators. 04/11/2004Lecture 4: Grouping Objects2 Main concepts to be covered Collections Loops Iterators Arrays.
© 2004 Pearson Addison-Wesley. All rights reserved5-1 Iterations/ Loops The while Statement Other Repetition Statements.
Programming with Collections Grouping & Looping - Collections and Iteration Week 7.
Lilian Blot CORE ELEMENTS COLLECTIONS & REPETITION Lecture 4 Autumn 2014 TPOP 1.
JS Arrays, Functions, Events Week 5 INFM 603. Agenda Arrays Functions Event-Driven Programming.
Chapter 5 Loops Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All rights reserved.
Grouping objects Collections and iterators. Main concepts to be covered Collections Loops Iterators.
Lists in Python.
Invitation to Computer Science, Java Version, Second Edition.
© The McGraw-Hill Companies, 2006 Chapter 4 Implementing methods.
Chapter 2 Basic Elements of Java. Chapter Objectives Become familiar with the basic components of a Java program, including methods, special symbols,
Chapter 6: Iteration Part 1. To be able to program loops with the while, for, and do statements To avoid infinite loops and off-by-one errors To understand.
Objects First With Java A Practical Introduction Using BlueJ Grouping objects Collections and iterators 2.0.
© 2006 Pearson Education 1 More Operators  To round out our knowledge of Java operators, let's examine a few more  In particular, we will examine the.
Copyright © 2012 Pearson Education, Inc. Chapter 6 More Conditionals and Loops Java Software Solutions Foundations of Program Design Seventh Edition John.
Grouping objects Collections and iterators Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Main.
JAVA COLLECTIONS M. TAIMOOR KHAN (ADAPTED FROM SWINBURNE NOTES)
JAVA: An Introduction to Problem Solving & Programming, 7 th Ed. By Walter Savitch ISBN © 2015 Pearson Education, Inc., Upper Saddle River,
Final Review. From ArrayLists to Arrays The ArrayList : used to organize a list of objects –It is a class in the Java API –the ArrayList class uses an.
GROUPING OBJECTS CITS1001. Lecture outline The ArrayList collection Process all items: the for-each loop 2.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved Chapter 4 Loops.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
1 FP Foundations, Scheme In Text: Chapter Chapter 14: FP Foundations, Scheme Mathematical Functions Def: A mathematical function is a mapping of.
JAVA COLLECTIONS LIBRARY School of Engineering and Computer Science, Victoria University of Wellington COMP T2, Lecture 2 Marcus Frean.
CMPSC 16 Problem Solving with Computers I Spring 2014 Instructor: Tevfik Bultan Lecture 4: Introduction to C: Control Flow.
Collections and Iteration Week 13.  Collections  ArrayList objects  Using loops with collections Collections and Iteration CONCEPTS COVERED THIS WEEK.
Java Programming: From Problem Analysis to Program Design, Second Edition 1 Lecture 1 Objectives  Become familiar with the basic components of a Java.
Collections Dwight Deugo Nesa Matic
 Python for-statements can be treated the same as for-each loops in Java Syntax: for variable in listOrstring: body statements Example) x = "string"
Chapter 5 – Part 3 Conditionals and Loops. © 2004 Pearson Addison-Wesley. All rights reserved2/19 Outline The if Statement and Conditions Other Conditional.
Fixed-sized collections Introduction to arrays 6.0.
Winter 2016CISC101 - Prof. McLeod1 CISC101 Reminders Quiz 3 next week. See next slide. Both versions of assignment 3 are posted. Due today.
6.0 Objects First with Java A Practical Introduction using BlueJ David J. Barnes Michael Kölling.
Lecture 8: Collections, Comparisons and Conversions. Svetla Boytcheva AUBG, Spring COS 240 Object-Oriented Languages.
© 2004 Pearson Addison-Wesley. All rights reserved October 5, 2007 Arrays ComS 207: Programming I (in Java) Iowa State University, FALL 2007 Instructor:
Lecture 4 CS140 Dick Steflik. Reading Keyboard Input Import java.util.Scanner – A simple text scanner which can parse primitive types and strings using.
1 © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. for-each PROS easy to use access to ALL items one-by-one ability to change the state.
CS314 – Section 5 Recitation 9
for-each PROS CONS easy to use access to ALL items one-by-one
4. Java language basics: Function
Chapter 4 Repetition Statements (loops)
Objects First with Java A Practical Introduction using BlueJ
Objects First with Java Introduction to collections
Functional Processing of Collections (Advanced)
Chapter 4 Control structures and Loops
© 2016 Pearson Education, Inc., Hoboken, NJ. All rights reserved.
© 2016 Pearson Education, Inc., Hoboken, NJ. All rights reserved.
COS 260 DAY 10 Tony Gauvin.
FP Foundations, Scheme In Text: Chapter 14.
COS 260 DAY 8 Tony Gauvin.
Algorithm Discovery and Design
Building Java Programs Chapter 19
Chapter 5 Loops Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All rights reserved.
Python Tutorial for C Programmer Boontee Kruatrachue Kritawan Siriboon
Building Java Programs Chapter 19
COS 260 DAY 11 Tony Gauvin.
Collections and iterators
COS 260 DAY 23 Tony Gauvin.
Arrays October 6, 2006 ComS 207: Programming I (in Java)
COS 260 DAY 23 Tony Gauvin.
Collections and iterators
Chapter 4: Loops and Iteration
Presentation transcript:

Functional Processing of Collections (Advanced) 6.0

2 Overview An alternative look at collections and iteration. A functional style of programming. Complements the imperative style used so far. Streams. Lambda notation. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

3 First introduced in Java 8 Lambdas borrow well-established techniques from the world of functional languages, such as Lisp, Haskell, Erlang, etc. Lambdas require additional syntax in the language. Stream operations provide an alternative means of implementing tasks associated with iteration over collections. Some existing library classes have been retro-fitted to support streams and lambda. Streams often involve multi-stage processing of data in the form of a pipeline of operations. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

4 Lambdas Bear a strong similarity to simple methods. They have: –A return type. –Parameters. –A body. They don’t have a name (anonymous methods). They have no associated object. They can be passed as parameters: –As code to be executed by the receiving method. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

5 Example scenario Animal monitoring in a national park (animal-monitoring project). Spotters send back reports of animals they have seen ( Sighting objects). Base collates sighting reports to check on population levels. Review version 1 of the project, which is implemented in a familiar (imperative) style: –The AnimalMonitoring class has methods to: List all sighting records; List sightings of a particular animal; Identify animals that could be endangered; Calculate sighting totals; Etc. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

6 Method and lambda equivalent public void printSighting(Sighting record) { System.out.println(record.getDetails()); } (Sighting record) -> { System.out.println(record.getDetails()); } © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

7 Processing a collection – the usual approach loop (for each element in the collection): get one element; do something with the element; end loop for(Sighting record : sightings) { printSighting(record); } © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

8 Processing a whole collection collection.doThisForEachElement(some code); sightings.forEach((Sighting record) -> { System.out.println(record.getDetails()); } ); © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

9 Reduced lambda syntax: infer type sightings.forEach((record) -> { System.out.println(record.getDetails()); } ); © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

10 Reduced lambda syntax: single parameter sightings.forEach(record -> { System.out.println(record.getDetails()); } ); © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

11 Reduced lambda syntax: single statement sightings.forEach( record -> System.out.println(record.getDetails()) ); © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

12 Streams Streams are often created from the contents of a collection. An ArrayList is not a stream, but its stream method creates a stream of its contents. Elements in a stream are not accessed via an index, but usually sequentially. The contents and ordering of the stream cannot be changed – changes require the creation of a new stream. A stream could potentially be infinite! Elements in a stream can be processed in parallel. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

13 Filters, maps and reductions Streams are immutable, so operations often result in a new stream. There are three common types of operation: –Filter: select items from the input stream to pass on to the output stream. –Map: replace items from the input stream with different items in the output stream. –Reduce: collapse the multiple elements of the input stream into a single element. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

14 Filter © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

15 Map

16 Reduce © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

17 A pipeline of operations filter(name is elephant).map(count).reduce(add up) © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

18 Pipelines Pipelines start with a source. Operations are either: –Intermediate, or –Terminal. Intermediate operations produce a new stream as output. Terminal operations are the final operation in the pipeline. –They might have a void return type. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

19 Filters Filters require a Boolean lambda as a parameter. A Boolean lambda is called a predicate. If the predicate returns true for an element of the input stream then that element is passed on to the output stream; otherwise it is not. (Filters determine which elements to retain.) Some predicates: –s -> s.getAnimal().equals("Elephant”) –s -> s.getCount() > 0 –(s) -> true // Pass on all elements. –(s) -> false // Pass on none. Example: print details of only the Elephant sightings. sightings.stream().filter(s -> "Elephant".equals(s.getAnimal())).forEach(s -> System.out.println(s.getDetails())); © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

20 The map method The type of the objects in the output stream is often (but not necessarily) different from the type in the input stream. E.g., extracting just the details String from a Sighting : sightings.stream().map(sighting -> sighting.getDetails()).forEach(details -> System.out.println(details)); © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

21 The reduce method More complex than both filter and map. Its task is to ‘collapse’ a multi-element stream to a single ‘value’. It takes two parameters: a value and a lambda: reduce(start, (acc, element) -> acc + element) The first parameter is a starting value for the final result. The lambda parameter itself takes two parameters: –an accumulating value for the final result, and –an element of the stream. The lambda determines how to merge an element with the accumulating value. –The lambda’s result will be used as the acc parameter of the lambda for the next element of the stream. –The start value is used as the first acc parameter that is paired with the first element of the stream. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

22 The reduce method – a comparative example int total = 0; for(Sighting sighting : sightings) { if(animal.equals(sighting.getAnimal())) { int count = sighting.getCount(); total = total + count; } sightings.stream().filter(sighting -> animal.equals(sighting.getAnimal()).map(sighting -> sighting.getCount()).reduce(0, (total, count) -> return total + count); Initial value Accumulation © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

23 Removal from a collection using a predicate lambda /** * Remove from the sightings list all of * those records with a count of zero. */ public void removeZeroCounts() { sightings.removeIf( sighting -> sighting.getCount() == 0); } © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

24 Summary Streams and lambdas are an important and powerful new feature of Java. They are likely to increase in importance over the coming years. Expect collection processing to move in that direction. Lambdas are widely used in other areas, too; e.g. GUI building for event handlers. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.

25 Summary A collection can be converted to a stream for processing in a pipeline. Typical pipeline operations are filter, map and reduce. Parallel processing of streams is possible. © 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved.