当前位置:网站首页>What grammar is it? ]
What grammar is it? ]
2020-11-06 21:19:00 【Mrchai521】
One : concise
There are three types of method references , Method references are made through a pair of double colons :: To express , Method reference is another way to write a functional interface
-
Static method reference , By class name :: Static method name , Such as Integer::parseInt
-
Instance method reference , By instance object :: Example method , Such as str::substring
-
Construction method reference , By class name ::new, Such as User::new
Two : Method reference
public final class Integer {
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
}
Quote... By method , You can assign a reference to a method to a variable , By assigning a value to Function, Explain that method reference is also a way of writing functional interface ,Lambda Expressions are also functional interfaces ,Lambda Expression is usually used to provide its own method body , The method reference usually refers to the ready-made method directly .
public class User {
private String username;
private Integer age;
public User() {
}
public User(String username, Integer age) {
this.username = username;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", age=" + age +
'}';
}
// Getter&Setter
}
public static void main(String[] args) {
// Use double colons :: To construct static function references
Function<String, Integer> fun = Integer::parseInt;
Integer value = fun.apply("123");
System.out.println(value);
// Use double colons :: To construct non static function references
String content = "Hello JDK8";
Function<Integer, String> func = content::substring;
String result = func.apply(1);
System.out.println(result);
// Constructor reference
BiFunction<String, Integer, User> biFunction = User::new;
User user = biFunction.apply("mengday", 28);
System.out.println(user.toString());
// Function reference is also a functional interface , So you can also take a function reference as a parameter of a method
sayHello(String::toUpperCase, "hello");
}
// Method has two parameters , One is
private static void sayHello(Function<String, String> func, String parameter){
String result = func.apply(parameter);
System.out.println(result);
}
3、 ... and :Optional Optional value
stay Google Guava in Optional, stay Swift There are similar grammars in languages , stay Swift Take an optional value as a data type , The status is equal to the basic type , The status is very high .
/** * @since 1.8 */
public final class Optional<T> {
private static final Optional<?> EMPTY = new Optional<>();
private final T value;
private Optional() {
this.value = null;
}
// Returns an empty Optional example
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
// Returns a Optional The current non null value of Optional
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
// Return to one Optional Specified value Optional, If it is not empty , Then return an empty Optional
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
// If Optional There is a value in , Return value , Otherwise throw NoSuchElementException .
public T get() {
if (value == null) {
throw new NoSuchElementException("No value present");
}
return value;
}
// return true If there is value , Otherwise false
public boolean isPresent() {
return value != null;
}
// If there is value , Then use this value to call the specified consumer , Otherwise, nothing will be done .
public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}
// If a value exists , And the predicate given by the value matches , Return to one Optional The value described , Otherwise, return an empty Optional
public Optional<T> filter(Predicate<? super T> predicate) {
Objects.requireNonNull(predicate);
if (!isPresent())
return this;
else
return predicate.test(value) ? this : empty();
}
// If there is a value , Then the mapping function provided by , If the result is not empty , Returns a Optional The results of Optional .
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));
}
}
// If a value exists , The application provides Optional The mapping function gives it , Return the result , Otherwise, return an empty Optional .
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Objects.requireNonNull(mapper.apply(value));
}
}
// If the value exists , Just return the value , If it doesn't exist, it will return other specified values
public T orElse(T other) {
return value != null ? value : other;
}
public T orElseGet(Supplier<? extends T> other) {
return value != null ? value : other.get();
}
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}
}
}
About of Method , It seems to be very popular now , Is to provide a static Method , The name of the method is of, Method returns the current class , And set the constructor to private private, Using static of Method instead of the constructor .
public class User {
private String username;
private Integer age;
private User() {
}
public static User of() {
return new User();
}
private User(String username, Integer age) {
this.username = username;
this.age = age;
}
public static User of(String username, Integer age) {
return new User(username, age);
}
}
public static void main(String[] args) {
// Optional Class has become Java 8 Part of the class library , stay Guava There has been , Probably Oracle It's used directly
// Optional Used to solve null pointer exception , Make the code more rigorous , Prevent because of null pointer NullPointerException Impact on code
String msg = "hello";
Optional<String> optional = Optional.of(msg);
// Judge whether there is value , Not empty
boolean present = optional.isPresent();
// If it's worth it , Return value , If it is equal to empty, then throw the exception
String value = optional.get();
// If it is empty , return else The specified value
String hi = optional.orElse("hi");
// If the value is not null , Is executed Lambda expression
optional.ifPresent(opt -> System.out.println(opt));
}
版权声明
本文为[Mrchai521]所创,转载请带上原文链接,感谢
边栏推荐
- An article taught you to use HTML5 SVG tags
- ES中删除索引的mapping字段时应该考虑的点
- Elasticsearch Part 6: aggregate statistical query
- JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
- Bitcoin once exceeded 14000 US dollars and is about to face the test of the US election
- Flink's datasource Trilogy 2: built in connector
- CCR coin frying robot: the boss of bitcoin digital currency, what you have to know
- The method of realizing high SLO on large scale kubernetes cluster
- Call analysis of start method in JNI thread and callback analysis of run method
- Application of restful API based on MVC
猜你喜欢

Metersphere developer's Manual

2020-08-20:GO语言中的协程与Python中的协程的区别?

An article will take you to understand SVG gradient knowledge

常用SQL语句总结

迅为-iMX6ULL开发板上配置AP热点

Share with Lianyun: is IPFs / filecoin worth investing in?

Description of phpshe SMS plug-in

CloudQuery V1.2.0 版本发布

2020-09-03:裸写算法:回形矩阵遍历。

C# 调用SendMessage刷新任务栏图标(强制结束时图标未消失)
随机推荐
It's time for your financial report to change to a more advanced style -- financial analysis cockpit
ES6 learning notes (5): easy to understand ES6's built-in extension objects
The native API of the future trend of the front end: web components
2020年数据库技术大会助力技术提升
An article will take you to understand SVG gradient knowledge
Staying up late summarizes the key points of report automation, data visualization and mining, which is different from what you think
window系统 本机查找端口号占用方法
行为型模式之备忘录模式
An article will take you to understand CSS alignment
2020-08-20:GO语言中的协程与Python中的协程的区别?
常用SQL语句总结
Using an example to understand the underlying processing mechanism of JS function
Behind the record breaking Q2 revenue of Alibaba cloud, the cloud opening mode is reshaping
What knowledge do Python automated testing learn?
An article takes you to understand CSS gradient knowledge
Description of phpshe SMS plug-in
To teach you to easily understand the basic usage of Vue codemirror: mainly to achieve code editing, verification prompt, code formatting
意派Epub360丨你想要的H5模板都在这里,电子书、大转盘、红包雨、问卷调查……
CCR coin frying robot: the boss of bitcoin digital currency, what you have to know
Helping financial technology innovation and development, atfx is at the forefront of the industry