1. What is functional interface in java8?
- The interface having one abstract method is called functional interface.
- The interface can contains other default methods but needs to have one abstract method.
- The functional interface are generally marked with annotation “@FunctionalInterface”.
- Which signifies that they are functional interface.
- Having said that, It is not mandatory to mark functional interface with annotation
- i.e. We can have functional interface without annotation “@FunctionalInterface”.
2. What are the attributes of functional interface ?
- Functional interface needs to have single abstract method.
- Functional interface can have other methods, declared in Object class like equals, toString, hashcode etc.
- Functional interface can have default methods (Java 8 feature)
3. Example of functional interface (Comparator) in java
We will look into the comparator interface which satisfy all the above points.
- Comparator interface has abstract method compare
- Comparator interface have equals method
- equals method is Object class method.
- Comparator interface has many defaults methods
- We have listed few of them in below code
4. Application of functional interface in java
- We have applied the comparator interface to sort objects using java 8.
- We can refer Sort objects on multiple fields post.
5. Program – functional interface Comparator in Java8 JDK
@FunctionalInterface public interface Comparator { int compare(T o1, T o2); boolean equals(Object obj); default Comparator reversed() { return Collections.reverseOrder(this); } default Comparator thenComparing(Comparator<? super T> other) { Objects.requireNonNull(other); return (Comparator & Serializable) (c1, c2) -> { int res = compare(c1, c2); return (res != 0) ? res : other.compare(c1, c2); }; } default Comparator thenComparing( Function<? super T, ? extends U> keyExtractor, Comparator<? super U> keyComparator) { return thenComparing(comparing(keyExtractor, keyComparator)); } default > Comparator thenComparing( Function<? super T, ? extends U> keyExtractor) { return thenComparing(comparing(keyExtractor)); } }