Java 8 Lambda expressions and you Technion – Institute of Technology Software Design (236700) Based on slides by: Sagie Davidovich, Assaf Israel Author:

Slides:



Advertisements
Similar presentations
Transparency No. 1 Java Collection API : Built-in Data Structures for Java.
Advertisements

Java 8 Technion – Institute of Technology Software Design (236700) Based on slides by: Sagie Davidovich, Assaf Israel Author: Assaf Israel - Technion 2013.
George Blank University Lecturer. CS 602 Java and the Web Object Oriented Software Development Using Java Chapter 4.
CS220 Software Development Lecture: Multi-threading A. O’Riordan, 2009.
Interfaces. In this class, we will cover: What an interface is Why you would use an interface Creating an interface Using an interface Cloning an object.
Stacks. 2 What is a stack? A stack is a Last In, First Out (LIFO) data structure Anything added to the stack goes on the “top” of the stack Anything removed.
Recommendation: Play the game and attempt to answer the questions yourself without looking at the answers. You’ll learn much less if you just look at the.
Stacks. 2 What is a stack? A stack is a Last In, First Out (LIFO) data structure Anything added to the stack goes on the “top” of the stack Anything removed.
Generic Subroutines and Exceptions CS351 – Programming Paradigms.
Java CourseWinter 2009/10. Introduction Object oriented, imperative programming language. Developed: Inspired by C++ programming language.
Starting Chapter 4 Starting. 1 Course Outline* Covered in first half until Dr. Li takes over. JAVA and OO: Review what is Object Oriented Programming.
Week 4-5 Java Programming. Loops What is a loop? Loop is code that repeats itself a certain number of times There are two types of loops: For loop Used.
CSE 331 Software Design & Implementation Hal Perkins Autumn 2012 Java Classes, Interfaces, and Types 1.
Monads Technion – Institute of Technology Software Design (236700) Author: Gal Lalouche - Technion 2015 © 1.
CS2110: SW Development Methods Textbook readings: MSD, Chapter 8 (Sect. 8.1 and 8.2) But we won’t implement our own, so study the section on Java’s Map.
1 Review of Java Higher Level Language Concepts –Names and Reserved Words –Expressions and Precedence of Operators –Flow of Control – Selection –Flow of.
1 Abstraction  Identify important aspects and ignore the details  Permeates software development programming languages are abstractions built on hardware.
Scala Technion – Institute of Technology Software Design (236700) Based on slides by: Sagie Davidovich, Assaf Israel Author: Gal Lalouche - Technion 2015.
Introduction to Java Prepared by: Ahmed Hefny. Outline Classes Access Levels Member Initialization Inheritance and Polymorphism Interfaces Inner Classes.
Functional Programming in Scheme and Lisp. Overview In a functional programming language, functions are first class objects. You can create them, put.
Recitation 4 Abstract classes, Interfaces. A Little More Geometry! Abstract Classes Shape x ____ y ____ Triangle area() base____ height ____ Circle area()
Dependency Injection Technion – Institute of Technology Author: Gal Lalouche - Technion 2015 ©
Best Practices. Contents Bad Practices Good Practices.
CSE 373: Data Structures and Algorithms Lecture 1: Introduction; ADTs; Stacks; Eclipse.
Object Oriented Software Development
Java Basics Opening Discussion zWhat did we talk about last class? zWhat are the basic constructs in the programming languages you are familiar.
1 Introduction  Algorithms  Data structures  Abstract data types  Programming with lists and sets © 2008 David A Watt, University of Glasgow Algorithms.
Dependency Injection Frameworks Technion – Institute of Technology Author: Assaf Israel - Technion 2013 ©
ICS3U_FileIO.ppt File Input/Output (I/O)‏ ICS3U_FileIO.ppt File I/O Declare a file object File myFile = new File("billy.txt"); a file object whose name.
Java8 Released: March 18, Lambda Expressions.
Lecture 7 February 24, Javadoc version and author Tags These go in the comments before named classes. –Put your SS# on a separate line from the.
Iteration Abstraction SWE Software Construction Fall 2009.
Interfaces. In order to work with a class, you need to understand the public methods  methods, return types,…  after you instantiate, what can you do.
CSE 373 Data Structures and Algorithms Lecture 1: Introduction; ADTs; Stacks; Eclipse.
M180: Data Structures & Algorithms in Java Stacks Arab Open University 1.
CSC 243 – Java Programming, Spring, 2014 Week 4, Interfaces, Derived Classes, and Abstract Classes.
Dependency Injection with Guice Technion – Institute of Technology Author: Gal Lalouche - Technion 2016 ©
Today… Preparation for doing Assignment 1. Invoking methods overview. Conditionals and Loops. Winter 2016CMPE212 - Prof. McLeod1.
Spartan Programming Technion – Institute of Technology Author: Gal Lalouche - Technion 2016 © 1 “Minimalism isn't always the right choice, but it's.
Java 8 Lambda Expressions and You Technion – Institute of Technology Software Design (236700) Based on slides by: Sagie Davidovich, Assaf Israel Author:
12-CRS-0106 REVISED 8 FEB 2013 CSG2H3 Object Oriented Programming.
Quiz 3 Topics Functions – using and writing. Lists: –operators used with lists. –keywords used with lists. –BIF’s used with lists. –list methods. Loops.
Monads Technion – Institute of Technology Software Design (236700) Author: Gal Lalouche - Technion 2016 © 1.
Notices Assn 2 is due tomorrow, 7pm. Moodle quiz next week – written in the lab as before. Everything up to and including today’s lecture: Big Topics are.
Computer Science Victoria University of Wellington Copyright: david streader, Victoria University of Wellington Simple Design COMP
Lecture 6:Interfaces and Abstract Classes Michael Hsu CSULA.
PySpark Tutorial - Learn to use Apache Spark with Python
Lecture 5:Interfaces and Abstract Classes
Java 8, Lambda Expressions and You
CS239-Lecture 4 FlumeJava Madan Musuvathi Visiting Professor, UCLA
EECE 310: Software Engineering
Recitation 11 Lambdas added to Java 8.
Generics, Lambdas, Reflections
Java 9 New features 8/11/2017 Iason Dimitrios Rodis.
Monads Author: Gal Lalouche - Technion 2017 © 1 1.
Functional Programming with Java
Stacks.
Conditional Statements
Generic programming in Java
Iteration Abstraction
Spark and Scala.
Functional interface.
Effective Java, 3rd Edition Chapter 7: Lambdas and Streams
Stacks.
Generics, Lambdas, Reflections
Computer Science 312 What’s New in Java 8? 1.
Interfaces.
Chengyu Sun California State University, Los Angeles
Threads and concurrency / Safety
Reasoning with Types.
Presentation transcript:

Java 8 Lambda expressions and you Technion – Institute of Technology Software Design (236700) Based on slides by: Sagie Davidovich, Assaf Israel Author: Gal Lalouche - Technion 2015 © 1

Life before Java 8 (cont.) Extracting employee names Extracting employee ages Author: Gal Lalouche - Technion 2015© 2 public List empNames(List employees) { List result = new ArrayList<>(); for (Employee emp: employees) { result.add(emp.getName()); } return result; } public List empAges(List employees) { List result = new ArrayList<>(); for (Employee emp: employees) { result.add(emp.getAge()); } return result; } DuplicationVariation

Life before Java 8 (cont.) Lets identify the control structure, and extract the behavior into an object Author: Gal Lalouche - Technion 2015© 3 public List empNames(List employees){ List result = new ArrayList<>(); for (Employee emp: employees) { result.add(emp.getName()); } return result; } public interface Mapper { public T map(U u); } public List map(List aList, Mapper mapper) { List result = new ArrayList<>(); for (U u: aList) { result.add(mapper.map(u)); } return result; }

Life before Java 8 (cont.) Extracting employee names Extracting employee ages Author: Gal Lalouche - Technion 2015© 4 List empNames = map(employees, new Mapper () { public String map(Employee e) { e.getName(); } }); List empAges = map(employees, new Mapper () { public Integer map(Employee e) { e.getAge(); } });

In the Kingdom of Nouns We removed the code duplication, but this is still very verbose…  Semantically, map is a higher level function  This means that it accepts a function as an argument (or returns a function)  Syntactically, functions do not exist as first class entities  All verbs (functions) have be accompanied by a noun (class)  /03/execution-in-kingdom-of-nouns.html /03/execution-in-kingdom-of-nouns.html  Prior to Java 8, Java was the only programming language in popular use without anonymous functions / blocks / lambdas / function pointers  This is not purely a syntactic issue; Java also lacked proper support for such function in its collections Author: Gal Lalouche - Technion 2015© 5

Enter Java 8! Extracting employee names Extracting employee ages Author: Gal Lalouche - Technion 2015© 6 List empNames = employees.stream().map(x -> x.getName()).collect(Collectors.toList()); List empAge = employees.stream().map(x -> x.getAge()).collect(Collectors.toList());

Let’s take a deeper look…  stream is a default method of List  map is a higher level function of stream  x -> x.getName() is a lambda expression  collect turns the stream back to a normal Collection (in our case, a List )  But what does it all mean? Author: Gal Lalouche - Technion 2015© 7 List empNames = employees.stream().map(x -> x.getName()).collect(Collectors.toList());

Default methods  default methods are default implementations for interfaces  This way you can add new functionality to an existing interface without breaking all depending code!  In our case, we added the stream() method to Collection  So is this the same as multiple inheritance ?  Not exactly, the behavior more closely resembles Traits, which we will discuss in detail when we talk about Scala  So are these extension methods (a la C#)?  No, because extension methods are actually syntactic sugar for static decorators  You can’t add methods yourself to existing classes (e.g., in C# you can add extension methods to String ). Author: Gal Lalouche - Technion 2015© 8 List empNames = employees.stream().map(x -> x.getName()).collect(Collectors.toList());

Higher order functions  map is a higher order function in stream  That is, a function that takes a function  There are other similar higher order functions in stream  filter, map, flatMap, sorted, reduce… Author: Gal Lalouche - Technion 2015© 9 List empNames = employees.stream().map(x -> x.getName()).collect(Collectors.toList());

Higher order functions – API examples  Assure we are not hiring anyone underage  Find the highest paid individual in the company  What is returned if the list is empty?  Instead of working with null, a new type called Optional is returned  Optional can be present (i.e. not null ) or not (i.e. null )  Has a method get() that returns T or throws an exception  Optional itself has higher order functions Author: Gal Lalouche - Technion 2015© 10 assert employees.stream().noneMatch(x -> x.age < 18); Optional ageOfRichest = $.map(x -> x.getAge); Optional $ = employees.stream().sorted((x,y) -> x.salary – y.salary); Optional is actually something called a Monad We will discuss monads in the last weeks of the course What’s this?

Higher order functions – Map-Reduce  Sum of all salaries in the company  There are programming models that work on the MapReduce principle  e.g. Hadoop Author: Gal Lalouche - Technion 2015© 11 employees.stream().mapToInt(Employee::getSalary)// note the mapToInt... why?.reduce(0, Integer::sum) // could also be done with Lambdas, or simply.sum()

Higher Order function – A more complex example  Get Israeli students with a top grade sorted by name (in Java 7)  In Java 8: Author: Gal Lalouche - Technion 2015© 12 List topGrades = new ArrayList<>(); Collections.sort(students, new Comparator () { public int compare(Student student1, Student student2) { return student1.getName().compareTo(student2.getName()); } }); for (Student student: students) if (student.getCountry() == "Israel") if (student.getGrade() >= 90) topGrades.add(student); List topStudents = students.stream().filter(x -> x.getCountry() == "Israel").filter(x -> x.getGrade() > 90).sorted((x,y) -> x.getName().compareTo(y.getName())).collect(Collectors.toList()); Sorts in place! Why is this bad? Depth of 3!

Streams Author: Gal Lalouche - Technion 2015© 13  We only iterate over a stream once, even if we have two (or more) higher level functions  This is because streams are lazily evaluated  until we call collect, no iteration takes place  collect is actually a form of mutable reduction  i.e., it reduces to a mutable container  They also provide us with a uniform API  Streams also give us “free” parallelization (why is it so easy?) List topStudents = students.stream().parallel().filter(x -> x.getCountry() == "Israel").filter(x -> x.getGrade() > 90).sorted((x, y) -> y.getGrade() - x.getGrade()).collect(Collectors.toList());

Lambdas and Default Methods  The signature for map is: map(Function mapper)  And here is the signature for Function:  An interface which has single abstract (i.e., non- default ) method can be called a Functional Interface  So is Java now a function language?  Nope  Lambdas are just syntactic sugar for implementing Functional Interfaces Author: Gal Lalouche - Technion 2015© 14 List empNames = employees.stream().map(x -> x.getName()).collect(Collectors.toList()); interface Function { R apply(T t); // retracted default methods }

Lambdas (cont.) We can also use lambda with “old” API!  Old code  New code  We can use the annotation to tell the compiler that the interface should be functional (a ) Author: Gal Lalouche - Technion 2015© 15 new Thread(new Runnable() public void run() { System.out.println("Kill me :("); } }).start(); new Thread(() -> System.out.println(“PARTEH! interface I { void A(); void B(); } // won’t compile

What else is new in Java 8?  New Date and Time APIs  Everything is now immutable, and immutable is good  Support for unsigned arithmetic  Embedding JavaScript code in Java  Better integeration with JavaFX  A java library for developing rich client applications Author: Gal Lalouche - Technion 2015© 16 ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); engine.eval(“console.log('Hello World!');");