In Java 8, Function is a functional interface; it takes an argument (object of type T) and returns an object (object of type R). The argument and output can be a different type.
Function.java
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
- T – Type of the input to the function.
- R – Type of the result of the function.
Further Reading
1. Function<T, R>
1.1 This example takes a <T> String
and returns the length of the string as <R> Integer
.
Java8Function1.java
package com.favtuts.java8; import java.util.function.Function; public class Java8Function { public static void main(String[] args) { Function<String, Integer> func = x -> x.length(); Integer apply = func.apply("favtuts"); // 7 System.out.println(apply); } }
Output
7
2. Chain Function<T, R>
2.1 This example chains the Function
with andThen()
.
Java8Function2.java
package com.favtuts.java; import java.util.function.Function; public class Java8Function2 { public static void main(String[] args) { Function<String, Integer> func = x -> x.length(); Function<Integer, Integer> func2 = x -> x * 2; Integer result = func.andThen(func2).apply("favtuts"); // 14 System.out.println(result); } }
Output
14
3. List -> Map
3.1 This example accepts Function
as an argument, convert a List
into a Map
.
Java8Function3.java
package com.favtuts.java8; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; public class Java8Function3 { public static void main(String[] args) { Java8Function3 obj = new Java8Function3(); List<String> list = Arrays.asList("node", "c++", "java", "javascript"); // lambda Map<String, Integer> map = obj.convertListToMap(list, x -> x.length()); System.out.println(map); // {node=4, c++=3, java=4, javascript=10} // method reference Map<String, Integer> map2 = obj.convertListToMap(list, obj::getLength); System.out.println(map2); } public <T, R> Map<T, R> convertListToMap(List<T> list, Function<T, R> func) { Map<T, R> result = new HashMap<>(); for (T t : list) { result.put(t, func.apply(t)); } return result; } public Integer getLength(String str) { return str.length(); } }
Output
{node=4, c++=3, java=4, javascript=10}
{node=4, c++=3, java=4, javascript=10}
4. List -> List
4.1 This example accepts Function
as an argument, convert a List
of String into another List
of String, which was hashed with SHA256.
Java8Function4.java
package com.favtuts.java8; import org.apache.commons.codec.digest.DigestUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Function; public class Java8Function4 { public static void main(String[] args) { Java8Function4 obj = new Java8Function4(); List<String> list = Arrays.asList("node", "c++", "java", "javascript"); // lambda //List<String> result = obj.map(list, x -> obj.sha256(x)); // method reference List<String> result = obj.map(list, obj::sha256); result.forEach(System.out::println); } public <T, R> List<R> map(List<T> list, Function<T, R> func) { List<R> result = new ArrayList<>(); for (T t : list) { result.add(func.apply(t)); } return result; } // sha256 a string public String sha256(String str) { return DigestUtils.sha256Hex(str); } }
Output
545ea538461003efdc8c81c244531b003f6f26cfccf6c0073b3239fdedf49446
cedb1bac7efcd7db47e9f2f2250a7c832aba83b410dd85766e2aea6ec9321e51
38a0963a6364b09ad867aa9a66c6d009673c21e182015461da236ec361877f77
eda71746c01c3f465ffd02b6da15a6518e6fbc8f06f1ac525be193be5507069d
P.S The DigestUtils.sha256Hex
is from the commons-codec
.
pom.xml
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.14</version> </dependency>
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-basic/java8