当前位置: 代码迷 >> 综合 >> Java Lambda 方法的引用(更为简洁的语法糖)
  详细解决方案

Java Lambda 方法的引用(更为简洁的语法糖)

热度:148   发布时间:2023-09-30 04:17:21.0

方法引用的使用: 本质就是语法糖,靠记忆活用。

  1. 使用情景: Lambda体只有一行方法调用的代码,且该方法的参数列表(除一些特例)和返回类型和函数式接口的抽象方法相同。
  2. 可以理解为函数式接口的抽象方法的方法体使用的是Lambda体中调用方法的方法体(实现)。
  3. 使用格式: 类或对象::方法名
  4. 三种使用规则:
    对象 :: 非静态方法
    类 :: 静态方法
    类 :: 非静态方法 (特别注意)

代码示例:

import org.junit.jupiter.api.Test;import static java.lang.System.out;import java.io.PrintStream;
import java.util.Comparator;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;public class LambdaTest3 {
    @Testpublic void test1(){
    PrintStream printStream = System.out;//对象 :: 非静态方法Consumer<String> consumer = printStream :: println;consumer.accept("Hello world.");}@Testpublic void test2() {
    Person person = new Person();//对象 :: 非静态方法Supplier<String> supplier = person :: toString;out.println(supplier.get());}@Testpublic void test3() {
    //类 :: 静态方法Consumer<String> consumer = Person :: shout;consumer.accept("How dare you!");}@Testpublic void test4() {
    //类 :: 静态方法Comparator<Integer> comparator = Integer :: compare;out.println(comparator.compare(1, 2));}@Testpublic void test5() {
    //类 :: 非静态方法(构造器)Supplier<Person> supplier = Person :: new;out.println(supplier.get());}@Testpublic void test6() {
    //类 :: 静态方法Function<Double, Long> function = Math :: round;out.println(function.apply(2.2));}@Testpublic void test7() {
    //特殊情况:只有靠记忆,一般不用。//int compareTo(Integer anotherInteger)//int compare(T o1, T o2);Comparator<Integer> comparator = Integer :: compareTo;out.println(comparator.compare(1, 0));}@Test public void test8() {
    //类 :: 非静态方法 //特殊情况Function<Person, String> function = Person :: getName;out.println(function.apply(new Person()));}@Test public void test9() {
    //类 :: 非静态方法(构造器)BiFunction<String, Integer, Person> function = Person :: new;out.println(function.apply("Michael", 25));}@Testpublic void test10(){
    //类 :: 非静态方法(看做构造器)Function<Integer, String []> function = String [] :: new;out.println(Arrays.toString(function.apply(10)));}}

输出:

[null, null, null, null, null, null, null, null, null, null]
Hello world.
Person [name=Nobody, gender=0, age=0]
How dare you!
-1
Person [name=Nobody, gender=0, age=0]
2
1
Nobody
Person [name=Michael, gender=25, age=0]
  相关解决方案