一、Supplier接口概述
Java 8中引入了函数式编程,添加了一些新的函数式接口和Lambda表达式。其中,Supplier是一个函数式接口,它不接受任何参数,返回一个结果。官方定义如下:
public interface Supplier<T> {
T get();
}
可以看出,Supplier接口只有一个get方法,该方法会返回一个类型为T的结果。通常情况下,由于只有一个方法,可以使用Lambda表达式来创建Supplier接口的实例。
二、使用Supplier接口
下面来看一些使用Supplier接口的示例,以便更好地理解Supplier接口的使用方法。
1、创建一个随机数
import java.util.Random;
import java.util.function.Supplier;
public class RandomNumber {
public static void main(String[] args) {
// 使用Lambda表达式创建Supplier接口实例
Supplier<Integer> randomSupplier = () -> new Random().nextInt();
// 获取随机数
int randomNumber = randomSupplier.get();
// 输出随机数
System.out.println(randomNumber);
}
}
上面的代码使用了Lambda表达式创建了一个Supplier实例,该实例可以返回一个Integer对象。调用get方法获取Supplier返回的随机数。输出结果类似于以下内容:
-1080115599
2、获取系统时间戳
import java.util.Date;
import java.util.function.Supplier;
public class CurrentTime {
public static void main(String[] args) {
// 使用Lambda表达式创建Supplier接口实例
Supplier<Long> currentTimeSupplier = System::currentTimeMillis;
// 获取当前时间戳
long currentTime = currentTimeSupplier.get();
// 输出当前时间戳
System.out.println(new Date(currentTime));
}
}
上面的代码使用了方法引用来创建Supplier实例,该实例可以返回当前时间戳。调用get方法获取Supplier返回的时间戳。输出结果类似于以下内容:
Thu Jul 22 11:52:18 CST 2021
3、获取默认值
import java.util.function.Supplier;
public class DefaultValue {
public static void main(String[] args) {
String text = null;
// 使用Lambda表达式创建Supplier接口实例
Supplier<String> defaultValueSupplier = () -> "default";
// 获取text的值,如果text为null则返回default
String textWithDefault = text == null ? defaultValueSupplier.get() : text;
// 输出text的值,如果text为null则输出default
System.out.println(textWithDefault);
}
}
上面的代码使用了Lambda表达式创建了一个返回默认值的Supplier实例。此代码还使用了Java的三元运算符来检查变量text是否为null。如果变量text为null,则使用Supplier实例返回默认值,否则使用变量text的值。输出结果类似于以下内容:
default
三、Supplier接口使用场景
Supplier接口常用于需要延迟计算或者计算时间较长的操作。如果我们需要在条件成立时才计算某个值,Supplier的实现可以封装该值的计算,然后根据需要计算该值。此外,Supplier还可以用于获取默认值、生成随机值等。
上文提到的三个示例都展示了不同的Supplier使用场景。第一个示例中,我们创建了一个Supplier实例来获取随机数。第二个示例中,我们使用Supplier接口从方法引用中获取当前时间戳。第三个示例中,我们使用Supplier接口获取默认值。
在Java中,Supplier还经常和Stream API一起使用。Stream API是Java 8添加的序列处理API,它允许开发人员以声明性方式来操作数据。在使用Stream API时,可使用Supplier来提供数据源。
四、总结
在Java 8中,Supplier是一个非常有用的函数式接口。它是一个不接收任何参数的函数,提供了一种抽象来延迟计算或通过计算生成值,以及获取默认值和生成随机值。我们可以使用Lambda表达式或者方法引用来创建Supplier实例,还可以将Supplier与Stream API结合使用,提供数据源。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/190048.html