Supplier는 인자를 받지 않고 Type T 객체를 리턴하는 함수형 인터페이스다.
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
Example 1 : Supplier
"HelloWorld"라는 문자열을 리턴하는 Supplier 예제입니다. Supplier로부터 객체를 리턴받을 때는 get()을 호출하면 됩니다.
import java.util.function.Supplier;
public class SupplierExample1 {
public static void main(String[] args) {
Supplier<String> supplier= ()-> "HelloWorld";
String result = supplier.get();
System.out.println(result);
}
}
HelloWorld
Example 2 : Supplier
Item 클래스의 객체를 리턴받는 예제입니다. Supplier는 Generics로 구현되어 어떤 클래스의 객체도 리턴하도록 구현할 수 있습니다.
import java.util.function.Supplier;
public class SupplierExample2 {
public static void main(String[] args) {
Supplier<Item> supplier= ()-> new Item(10, "Hello");
Item result = supplier.get();
System.out.println(result.getId() + ", " + result.getValue());
}
}
/* Item.java */
public class Item {
private int id;
private String value;
public Item(int id, String value) {
this.id = id;
this.value = value;
}
public int getId() {
return id;
}
public String getValue() {
return value;
}
}
10, Hello
Example 3 : Supplier with method reference
Method reference 방식으로 Supplier를 정의하는 예제입니다. 인자를 받지 않고 String의 객체를 리턴하는 메소드 getHelloWorld()가 있습니다. SupplierExample3::getHelloWorld와 같은 형식으로 입력하면 Supplier<String> 객체가 입력됩니다.
import java.util.function.Supplier;
public class SupplierExample3 {
public static void main(String[] args) {
Supplier<String> supplier= SupplierExample3::getHelloWorld;
String result = supplier.get();
System.out.println(result);
}
public static String getHelloWorld() {
return "Hello World";
}
}
Hello World
Example 4 : Primitive Supplier
Primitive 타입에 대한 Supplier들입니다. Generics로 구현된 Supplier와 다르게, Primitive 타입 전용의 Supplier들이 제공됩니다.
import java.util.function.*;
public class SupplierExample4 {
static String hello = "hello";
public static void main(String[] args) {
BooleanSupplier booleanSupplier = () -> hello.equals("world");
IntSupplier intSupplier = () -> hello.length();
LongSupplier longSupplier = () -> hello.length();
DoubleSupplier doubleSupplier = () -> 12.34 - hello.length();
System.out.println(booleanSupplier.getAsBoolean());
System.out.println(intSupplier.getAsInt());
System.out.println(longSupplier.getAsLong());
System.out.println(doubleSupplier.getAsDouble());
}
}
false
5
5
7.34
Example 5 : Supplier with Stream.generate()
Stream.generate()는 Supplier를 인자로 받아, 무한한 Stream을 생성합니다. 예제에서는 Random 숫자를 리턴하는 Supplier를 정의하였습니다. limit(5)는 Stream을 5개로 제한하는 코드이고, forEach(System.out::println)는 Loop를 돌면서 객체를 출력합니다.
import java.util.Random;
import java.util.function.*;
import java.util.stream.Stream;
public class SupplierExample5 {
public static void main(String[] args) {
Supplier<Integer> randomNumbersSupplier = () -> new Random().nextInt(100);
Stream.generate(randomNumbersSupplier)
.limit(5)
.forEach(System.out::println);
}
}
32
57
11
10
91
'JAVA > Chapter14' 카테고리의 다른 글
JAVA - orElse, orElseGet (0) | 2022.09.08 |
---|---|
Java - 람다식에서 메서드 참조/생성자 참조 사용법 (0) | 2022.09.01 |
Java - ::(더블콜론) (0) | 2022.08.30 |
Java 입출력(I/O), 스트림(Stream), 버퍼(Buffer) 개념 및 사용법 (0) | 2022.08.25 |
OutputStream 정의 (0) | 2022.08.25 |