12 03 Functional Interface
12 03 Functional Interface
Object-Oriented Programming
Object-Oriented Programming 2
Outlines
1. Motivation.
2. Functional interface: the basic concepts.
3. Functional interface in action.
Object-Oriented Programming 3
Motivation
Object-Oriented Programming 4
Modular solution
Object-Oriented Programming 5
Functional Interface:
The Basic Concepts
Object-Oriented Programming 6
Functional interface
• Related concepts:
• Generics & Nested Constructs (Anonymous Class).
Object-Oriented Programming 7
The Predicate interface.
Object-Oriented Programming 8
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
Object-Oriented Programming 9
As an example, we are going to use both
the Predicate and BiPredicate interfaces.
https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html
Object-Oriented Programming 10
The Predicate interface
Object-Oriented Programming 11
The Predicate interface
Object-Oriented Programming 12
Other functional interfaces have similar
characteristics to the Predicate.
Object-Oriented Programming 13
Functional Interface
In Action
Object-Oriented Programming 14
Case study
Object-Oriented Programming 15
package example.xlambda;
import java.util.function.Predicate;
Using functional interface
public class Driver {
public static void main(String[] args) {
Rectangle rectangle1 = new Rectangle(10.0, 12.0);
A simple record
Rectangle rectangle2 = new Rectangle(22.0, 22.0); to represent rectangle.
package example.xlambda;
System.out.println(rectangle1);
System.out.println(isSquare.test(rectangle1));
System.out.println(isJumboSquare.test(rectangle1));
System.out.println(rectangle2);
System.out.println(isSquare.test(rectangle2));
System.out.println(isJumboSquare.test(rectangle2));
}
} h:10.0|w:12.0
false
false
h:22.0|w:22.0
true
Object-Oriented Programming 16
true
package example.xlambda;
import java.util.function.Predicate;
Chaining functional interface
public class Driver { package example.xlambda;
public static void main(String[] args) {
Rectangle rectangle1 = new Rectangle(10.0, 12.0); import java.util.function.BiPredicate;
Rectangle rectangle2 = new Rectangle(22.0, 22.0); import java.util.function.Predicate;
• Specs:
• A phone number can only consist of numerical characters.
• We could use a regular expression (regex) here.
• The length is, say, fixed to 10.
Object-Oriented Programming 19
package example.anonymousclass;
if (this.formattedPhoneNumber.length() != NUMBER_LENGTH) {
this.formattedPhoneNumber = null;
} package example.anonymousclass;
return this; public class Driver {
}
public static void main(String[] args) {
public String getFormattedPhoneNumber() { PhoneNumberPrinter printer =
return this.formattedPhoneNumber; new PhoneNumberPrinter();
}
printer.print("0123-456-789");
@Override printer.print("0123-456-7890");
public String toString() { }
return this.formattedPhoneNumber + }
"|" + phoneNumber;
}
};
System.out.println(formatter.take(phoneNumber));
}
} 0123456789|0123-456-789
null|0123-456-7890
Object-Oriented Programming 20
Anonymous class version
package example.anonymousclass;
Is there any representative interface in
the java.util.function package for this? public interface IPhoneNumberFomatter {
abstract IPhoneNumberFomatter take(String phoneNumber);
package example.anonymousclass;
printer.print("0123-456-789");
printer.print("0123-456-7890");
}
}
0123456789|0123-456-789
null|0123-456-7890
Object-Oriented Programming 21
We could use the Consumer interface.
It accepts a parameter without providing any return.
Object-Oriented Programming 22
Functional interface version
package example.anonymousclass;
import java.util.function.Consumer;
if (formattedPhoneNumber.length() != NUMBER_LENGTH) {
formattedPhoneNumber = null;
}
printer.accept("0123-456-789");
printer.accept("0123-456-7890");
}
}
0123456789|0123-456-789
null|0123-456-7890
Object-Oriented Programming 23
Todo
Object-Oriented Programming 24
References
Object-Oriented Programming 25
Thank
you
Object-Oriented Programming 26