当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Gather in Beijing! The countdown to openi 2020
- Pn8162 20W PD fast charging chip, PD fast charging charger scheme
- 事务的隔离级别与所带来的问题
- To Lianyun analysis: why is IPFs / filecoin mining so difficult?
- The legality of IPFs / filecoin: protecting personal privacy from disclosure
- image operating system windows cannot be used on this platform
- 2020-09-03:裸写算法:回形矩阵遍历。
- ERD-ONLINE 免费在线数据库建模工具
- ORA-02292: 违反完整约束条件 (MIDBJDEV2.SYS_C0020757) - 已找到子记录
- Bitcoin once exceeded 14000 US dollars and is about to face the test of the US election
猜你喜欢

An article takes you to understand CSS3 picture border

How to make characters move

Zero basis to build a web search engine of its own

Kubernetes and OAM to build a unified, standardized application management platform knowledge! (Internet disk link attached)

C# 调用SendMessage刷新任务栏图标(强制结束时图标未消失)

Small program introduction to proficient (2): understand the four important files of small program development

How does filecoin's economic model and future value support the price of fil currency breaking through thousands

Gather in Beijing! The countdown to openi 2020

Why is quicksort so fast?

Road to simple HTML + JS to achieve the most simple game Tetris
随机推荐
html+ vue.js Implementing paging compatible IE
ado.net和asp.net的关系
A concise tutorial for Nacos, ribbon and feign
解决 WPF 绑定集合后数据变动界面却不更新的问题
With this artifact, quickly say goodbye to spam messages
Multi robot market share solution
How to prepare for the system design interview
Summary of front-end performance optimization that every front-end engineer should understand:
Digital city responds to relevant national policies and vigorously develops the construction of digital twin platform
常用SQL语句总结
CloudQuery V1.2.0 版本发布
2020-08-29:进程线程的区别,除了包含关系之外的一些区别,底层详细信息?
Diamond standard
Event monitoring problem
jenkins安装部署过程简记
An article takes you to understand CSS3 picture border
ES6 learning notes (3): teach you to use js object-oriented thinking to realize the function of adding, deleting, modifying and checking tab column
Road to simple HTML + JS to achieve the most simple game Tetris
意派Epub360丨你想要的H5模板都在这里,电子书、大转盘、红包雨、问卷调查……
Use modelarts quickly, zero base white can also play AI!