当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Python 100 cases
- 行为型模式之备忘录模式
- ado.net和asp.net的关系
- Visual rolling [contrast beauty]
- 【ElasticSearch搜索引擎】
- What course of artificial intelligence? Will it replace human work?
- An article will introduce you to CSS3 background knowledge
- 【涂鸦物联网足迹】涂鸦云平台全景介绍
- Look! Internet, e-commerce offline big data analysis best practice! (Internet disk link attached)
- Road to simple HTML + JS to achieve the most simple game Tetris
猜你喜欢
Zero basis to build a web search engine of its own
2020-08-18:介绍下MR过程?
统计项目代码行数
大数据处理黑科技:揭秘PB级数仓GaussDB(DWS) 并行计算技术
This project allows you to quickly learn about a programming language in a few minutes
To teach you to easily understand the basic usage of Vue codemirror: mainly to achieve code editing, verification prompt, code formatting
jenkins安装部署过程简记
With this artifact, quickly say goodbye to spam messages
行为型模式之备忘录模式
【涂鸦物联网足迹】涂鸦云平台全景介绍
随机推荐
ES6 learning notes (2): teach you to play with class inheritance and class objects
Outsourcing is really difficult. As an outsourcer, I can't help sighing.
Behind the record breaking Q2 revenue of Alibaba cloud, the cloud opening mode is reshaping
Open source a set of minimalist front and rear end separation project scaffold
DC-1 target
Python basic variable type -- list analysis
Road to simple HTML + JS to achieve the most simple game Tetris
An article taught you to download cool dog music using Python web crawler
实用工具类函数(持续更新)
Zero basis to build a web search engine of its own
Those who have worked in China for six years and a million annual salary want to share these four points with you
如何在终端启动Coda 2中隐藏的首选项?
jenkins安装部署过程简记
ES6 learning notes (4): easy to understand the new grammar of ES6
Pn8162 20W PD fast charging chip, PD fast charging charger scheme
nacos、ribbon和feign的簡明教程
How does cglib implement multiple agents?
2020-08-15:什么情况下数据任务需要优化?
The legality of IPFs / filecoin: protecting personal privacy from disclosure
2020-08-20:GO语言中的协程与Python中的协程的区别?