知乎专栏 |
目录
Supplier<String> supplier = () -> "hello, world"; String result = supplier.get(); System.out.println(result); Supplier stringSupplier = () -> new String("Hi Neo"); String string = stringSupplier.get(); System.out.println(string); Supplier<LocalDateTime> currentTime = () -> LocalDateTime.now(); LocalDateTime now = currentTime.get(); // 计算当前时间 Optional<String> optional = Optional.ofNullable("hello"); String orElseGet = optional.orElseGet(() -> "world"); Supplier userSupplier= () -> new User(1,"netkiller"); User user=userSupplier.get(); System.out.println(user.getName());
package cn.netkiller.test; import java.util.function.Supplier; public class TestSupplier { private final int age = 24; TestSupplier() { System.out.println(age); } public static void main(String[] args) { Supplier<TestSupplier> supplier = TestSupplier::new; //调用get()方法,此时会调用对象的构造方法,即获得到真正对象 supplier.get(); System.out.println(supplier.get().test()); TestSupplier test = supplier.get(); System.out.println(test.test()); } private String test() { return "Helloworld!!!"; } }
package cn.netkiller.test; import java.util.function.Supplier; public class TestSupplier { private final int age = 24; private final String name; TestSupplier(String name) { this.name = name; // System.out.println(name); } public static void main(String[] args) { Supplier<String> stringSupplier = () -> { return "test1"; }; System.out.println(stringSupplier.get()); Supplier<String> stringSupplier1 = () -> "test2"; System.out.println(stringSupplier1.get()); Supplier<TestSupplier> testSupplier = () -> new TestSupplier("Neo"); System.out.println(testSupplier.get().name); // String name = "Netkiller"; // Supplier<TestSupplier> testSupplier1 = (name) -> {new TestSupplier(name)}; // System.out.println(testSupplier1.get().name); // System.out.println(test.test()); } private String test() { return "Helloworld!!!"; } }
package cn.netkiller.test; import java.util.concurrent.ExecutionException; import java.util.function.Supplier; public class Test { public static void main(String[] args) throws ExecutionException, InterruptedException { System.out.println(Thread.currentThread()); process(() -> { System.out.println(Thread.currentThread().getName() + " Process..."); return "Test"; }); Supplier<String> stringSupplier1 = () -> "netkiller"; process(stringSupplier1); } public static <T> void process(Supplier<T> supplier) { // System.out.println(Thread.currentThread().getName() + " Process..."); // CompletableFuture<T> runAsync = CompletableFuture.supplyAsync(supplier); // runAsync.join(); // System.out.println(variable.get()); T value = supplier.get(); System.out.println(value); } }
IntSupplier - 有getAsInt()方法
package cn.netkiller.test; import java.util.function.IntSupplier; import java.util.stream.IntStream; public class Test { public static void main(String[] args) { IntSupplier naturalGenerator = new IntSupplier() { int currentValue = 0; public int getAsInt() { return currentValue++; } }; IntStream.range(0, 10).forEach((n) -> { System.out.println(naturalGenerator.getAsInt()); }); } }
自定义 getAsInt 抽象方法,可以定制步进值
package cn.netkiller.test; import java.util.function.IntSupplier; import java.util.stream.IntStream; public class Test { public static void main(String[] args) { System.out.println(Thread.currentThread()); IntSupplier naturalGenerator = new IntSupplier() { int currentValue = 1; public int getAsInt() { return currentValue *= 2; } }; IntStream.range(0, 10).forEach((n) -> { System.out.println(naturalGenerator.getAsInt()); }); } }
LongSupplier - 有getAsLong()方法
LongSupplier longSupplier1 = () -> LocalDate.now().toEpochDay(); System.out.println(longSupplier1.getAsLong()); LongSupplier longSupplier2 = () -> Long.parseLong("1024"); System.out.println(longSupplier2.getAsLong()); LongSupplier longSupplier3 = () -> { long num1 = 30L; long num2 = 50L; return num1 * num2; }; System.out.println(longSupplier3.getAsLong()); LongSupplier time = new Date()::getTime; System.out.println(time.getAsLong());
public static void main(String[] args) { String id = test(() -> new Random().nextLong()); System.out.println(id); } public static String test(LongSupplier ls) { return "no. " + ls.getAsLong(); }
DoubleSupplier - 有getAsDouble()方法
DoubleSupplier random = () -> new Random().nextDouble(); System.out.println(random.getAsDouble()); DoubleSupplier doubleSupplier = () -> Double.parseDouble("123.0987"); System.out.println(doubleSupplier.getAsDouble()); DoubleSupplier doubleSupplier1 = () -> { double val1 = 35.30; double val2 = 45.97; return val1 * val2; }; System.out.println(doubleSupplier1.getAsDouble()); DoubleSupplier random1 = new Random()::nextDouble; System.out.println(random1.getAsDouble());
BooleanSupplier - 有getAsBoolean()方法。
BooleanSupplier booleanSupplier1 = () -> LocalDate.now().isLeapYear(); System.out.println(booleanSupplier1.getAsBoolean()); BooleanSupplier booleanSupplier2 = () -> "netkiller".length() > 5; System.out.println(booleanSupplier2.getAsBoolean()); BooleanSupplier booleanSupplier3 = () -> { int num = 16; if (num % 2 == 0) { return true; } return false; }; System.out.println(booleanSupplier3.getAsBoolean());