Main Tutorials

Java 8 Function Examples

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
Java 8 BiFunction Examples

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.mkyong;

import java.util.function.Function;

public class JavaMoney {

    public static void main(String[] args) {

        Function<String, Integer> func = x -> x.length();

        Integer apply = func.apply("mkyong");   // 6

        System.out.println(apply);

    }

}

Output


6

2. Chain Function<T, R>

2.1 This example chains the Function with andThen().

Java8Function2.java

package com.mkyong;

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("mkyong");   // 12

        System.out.println(result);

    }

}

Output


12

3. List -> Map

3.1 This example accepts Function as an argument, convert a List into a Map.

Java8Function3.java

package com.mkyong;

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

package com.mkyong;

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>

References

About Author

author image
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

Subscribe
Notify of
5 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Sudharson
4 years ago

When i try the andThen method that you have given in your example, I get the below error. Kindly help me understand what is the issue here. The Function example is clear, however the Chain Function example gives me the below error.
“The method andThen(Function) is undefined for the type Function”

Yasmeen
3 years ago
Reply to  Sudharson

check if you import “java.util.function.Function”

arun
3 years ago
Thanks for providing  examples on Function interface step by step.

may i know how to convert below code into java8 using lamda and foreach

 Map<T, R> result = new HashMap<>();
        for (T t : list) {
            result.put(t, func.apply(t));
        }
Gagan
3 years ago
Reply to  arun

Map<T, R> result = new HashMap<>();
list.foreach(item -> result.put(item, func.apply(item)));