{

Java 8 Supplier Interface examples | Functional Interfaces tutorials in java


java8 Supplier Interface examples

java.util.function.supplier Interface

The supplier is a functional interface defined in java.util.function package in java8. This returns supplier of the result. It has a single abstract method get(). This interface is used as an assignment target for lambda expressions and method references/constructor references.

Following is a Supplier interface declaration

@FunctionalInterface  
public interface Supplier<T>{  
  T get();  
}  

T is the result produced by this method.

Simple Supplier get Example

It is an example of printing a message using the supplier. Created an object using the Supplier interface and called the get() method.

import java.util.function.Supplier;
public class MySupplierExample {
    public static void main(String[] args) {
        Supplier<String> stringSupplier = () -> new String("Hi Frank");
        String strMsg = stringSupplier.get();
        System.out.println(strMsg);
    }
}  

and output:

Hi Frank  

Supplier Object Creation of a class

The supplier is used to create an object of a class.

Class name and new keyword will create a supplier. supplier get method returns the object of a class.

import java.util.function.Supplier;
public class MySupplierExample {
    public static void main(String[] args) {
        Supplier<Message> messageSupplier = Message::new;
        Message message = messageSupplier.get();
        System.out.println(message.getMsg("John"));
    }
}
class Message {
    public String getMsg(String name) {
        return name;
    }
}  

the output of the above code is

John  

Supplier Static method call example

Another way, to create a Supplier object type using a direct static method with Class Name.

supplier.get() will be called to call static directly.

import java.util.function.Supplier;
public class MySupplierExample {
    public static void main(String[] args) {
        Supplier<String> strSupplier = Message::getStaticMsg;
        System.out.println(strSupplier.get());
    }
}
class Message {
    public static String getStaticMsg() {
        return "Static Message";
    }
}  

The output of the above code is

Static Message  

Passing Supplier as an argument Stream API methods example

Here supplier is passed as an argument to stream method. Stream map() method accepts the supplier Functional interface as an argument.

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class MySupplierExample {
    public static void main(String[] args) {
        List<User> users= new ArrayList<>();
        users.add(new User(1,"Kiran"));
        users.add(new User(2,"Frank"));
        users.add(new User(3,"John"));
        users.add(new User(4,"Tom"));
        Stream names = users.stream().map(User::getName);
        names.forEach(name -> System.out.println(name));
    }
}

public class User {
    Integer id;
    String name;
    public User(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

The output of the above code

Kiran  
Frank  
John  
Tom  

Supplier Constructor arguments example

Created User object by passing Arguments and returns Supplier object. calling get() method return the object

import java.util.function.Supplier;  
public class MySupplierExample {  
 public static void main(String[] args) {  
  Supplier<User> userSupplier= () -> new User(1,"hello");  
  User user=userSupplier.get();  
  System.out.println(user.getName());  
 }  
}  

Output:

Ram

How to generate an infinite sequence of natural numbers

if you want to generate infinite natural numbers increment order, you can use the below function

import java.util.function.IntSupplier;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        IntSupplier naturalGenerator = new IntSupplier() {
            int currentValue = 0;

            public int getAsInt() {
                return currentValue++;
            }
        };

        IntStream naturalStream = IntStream.generate(naturalGenerator);

    }
}

Primitive Supplier interfaces

There are different Supplier interfaces for primitive types.

All the below interfaces has a single abstract method. All these interfaces are defined in java.util.function package

  • IntSupplier - has getAsInt() method
  • LongSupplier - has getAsLong() method
  • DoubleSupplier - has getAsDouble() method
  • BooleanSupplier - has getAsBoolean() method

Conclusion

In this tutorial, Learned Supplier functional interface with various examples using this class

THE BEST NEWSLETTER ANYWHERE
Join 6,000 subscribers and get a daily digest of full stack tutorials delivered to your inbox directly.No spam ever. Unsubscribe any time.

Similar Posts
Subscribe
You'll get a notification every time a post gets published here.