Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs ›...
Transcript of Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs ›...
![Page 1: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/1.jpg)
Java 8 Functional Interfaces
Consumer
Douglas C. Schmidt
![Page 2: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/2.jpg)
Learning Objectives in This Lesson• Recognize foundational functional programming features in Java 8, e.g.,
• Lambda expressions
• Method & constructor references
• Key functional interfaces
• Predicate
• Function
• BiFunction
• Supplier
• Consumer
![Page 3: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/3.jpg)
Overview ofFunctional Interfaces: Consumer
Douglas C. Schmidt
![Page 4: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/4.jpg)
• A Consumer accepts a parameter & returns no results, e.g.,
• public interface Consumer<T> { void accept(T t); }
Overview of Common Functional Interfaces: Consumer
See docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html
![Page 5: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/5.jpg)
• A Consumer accepts a parameter & returns no results, e.g.,
• public interface Consumer<T> { void accept(T t); }
Overview of Common Functional Interfaces: Consumer
See docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html
Consumer is a generic interface that is parameterized by one reference type
![Page 6: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/6.jpg)
• A Consumer accepts a parameter & returns no results, e.g.,
• public interface Consumer<T> { void accept(T t); }
Overview of Common Functional Interfaces: Consumer
See docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html
Its single abstract method is passed one parameter & returns nothing
![Page 7: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/7.jpg)
List<Thread> threads = Arrays.asList(new Thread("Larry"),
new Thread("Curly"),
new Thread("Moe"));
threads.forEach(System.out::println);
threads.sort(Comparator.comparing(Thread::getName));
threads.forEach(System.out::println);
• A Consumer accepts a parameter & returns no results, e.g.,
• public interface Consumer<T> { void accept(T t); }
Overview of Common Functional Interfaces: Consumer
See github.com/douglascraigschmidt/LiveLessons/tree/master/Java8/ex5
Create a list of threads with the names of the three stooges
![Page 8: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/8.jpg)
List<Thread> threads = Arrays.asList(new Thread("Larry"),
new Thread("Curly"),
new Thread("Moe"));
threads.forEach(System.out::println);
threads.sort(Comparator.comparing(Thread::getName));
threads.forEach(System.out::println);
• A Consumer accepts a parameter & returns no results, e.g.,
• public interface Consumer<T> { void accept(T t); }
Overview of Common Functional Interfaces: Consumer
See docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html#forEach
Print out threads using forEach()
![Page 9: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/9.jpg)
public interface Iterable<T> {
...
default void forEach(Consumer<? super T> action) {
for (T t : this) {
action.accept(t);
}
}
• A Consumer accepts a parameter & returns no results, e.g.,
• public interface Consumer<T> { void accept(T t); }
Overview of Common Functional Interfaces: Consumer
Here’s how the forEach() method uses the Consumer passed to it.
![Page 10: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/10.jpg)
public interface Iterable<T> {
...
default void forEach(Consumer<? super T> action) {
for (T t : this) {
action.accept(t);
}
}
• A Consumer accepts a parameter & returns no results, e.g.,
• public interface Consumer<T> { void accept(T t); }
Overview of Common Functional Interfaces: Consumer
System.out::println
The consumer parameter is bound to the System.out::println method reference.
![Page 11: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/11.jpg)
public interface Iterable<T> {
...
default void forEach(Consumer<? super T> action) {
for (T t : this) {
action.accept(t);
}
}
• A Consumer accepts a parameter & returns no results, e.g.,
• public interface Consumer<T> { void accept(T t); }
Overview of Common Functional Interfaces: Consumer
The accept() method is replaced by the call to System.out.println().
System.out.println(t)
![Page 12: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/12.jpg)
![Page 13: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/13.jpg)
Java 8 Functional Interfaces
Other Properties
Douglas C. Schmidt
![Page 14: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/14.jpg)
Learning Objectives in This Lesson• Recognize foundational functional programming features in Java 8, e.g.,
• Lambda expressions
• Method & constructor references
• Key functional interfaces
• Other properties of functional interfaces
![Page 15: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/15.jpg)
Other Properties ofFunctional Interfaces
Douglas C. Schmidt
![Page 16: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/16.jpg)
• Functional interfaces may also have default methods and/or static methods
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
default Comparator<T> reversed()
{ return Collections.reverseOrder(this); }
static <T extends Comparable<? super T>>
Comparator<T> reverseOrder()
{ return Collections.reverseOrder(); }
...
Other Properties of Functional Interfaces
See docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
![Page 17: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/17.jpg)
• Functional interfaces may also have default methods and/or static methods, e.g.,
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
default Comparator<T> reversed()
{ return Collections.reverseOrder(this); }
static <T extends Comparable<? super T>>
Comparator<T> reverseOrder()
{ return Collections.reverseOrder(); }
...
Other Properties of Functional Interfaces
See docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
A comparison function that imposes a total ordering on some collection of objects.
![Page 18: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/18.jpg)
• Functional interfaces may also have default methods and/or static methods, e.g.,
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
default Comparator<T> reversed()
{ return Collections.reverseOrder(this); }
static <T extends Comparable<? super T>>
Comparator<T> reverseOrder()
{ return Collections.reverseOrder(); }
...
Other Properties of Functional Interfaces
See docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html
This annotation type indicates that this interface type declaration is
intended as a functional interface.
![Page 19: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/19.jpg)
• Functional interfaces may also have default methods and/or static methods, e.g.,
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
default Comparator<T> reversed()
{ return Collections.reverseOrder(this); }
static <T extends Comparable<? super T>>
Comparator<T> reverseOrder()
{ return Collections.reverseOrder(); }
...
Other Properties of Functional Interfaces
The primary abstract method in this functional interface.
![Page 20: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/20.jpg)
• Functional interfaces may also have default methods and/or static methods, e.g.,
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
default Comparator<T> reversed()
{ return Collections.reverseOrder(this); }
static <T extends Comparable<? super T>>
Comparator<T> reverseOrder()
{ return Collections.reverseOrder(); }
...
Other Properties of Functional Interfaces
A default method provides the default implementation, which can be overridden.
See earlier lesson on “Overview of Functional Interfaces: Function”
![Page 21: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/21.jpg)
• Functional interfaces may also have default methods and/or static methods, e.g.,
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
default Comparator<T> reversed()
{ return Collections.reverseOrder(this); }
static <T extends Comparable<? super T>>
Comparator<T> reverseOrder()
{ return Collections.reverseOrder(); }
...
Other Properties of Functional Interfaces
This static method provides the one-and-only implementation.
![Page 22: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/22.jpg)
• Functional interfaces may also have default methods and/or static methods, e.g.,
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
default Comparator<T> reversed()
{ return Collections.reverseOrder(this); }
static <T extends Comparable<? super T>>
Comparator<T> reverseOrder()
{ return Collections.reverseOrder(); }
...
See docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html
An abstract method that overrides a public java.lang.Object method
does not count as part of the interface's abstract method count.
Other Properties of Functional Interfaces
![Page 23: Java 8 Functional Interfaces - Vanderbilt University › ~schmidt › cs891f › 2019-PDFs › java...Learning Objectives in This Lesson •Recognize foundational functional programming](https://reader034.fdocuments.in/reader034/viewer/2022052518/5f0be1567e708231d432ab88/html5/thumbnails/23.jpg)