方法引用的学习

把已经有的方法拿过来用,当做函数式接口中的抽象方法的方法体。

1.引用处必须是函数式接口

2.被引用的方法必须已经存在

3.被引用方法的形参和返回值需要跟抽象方法保持一致

4.被引用方法的功能要满足当前的需求

方法引用的分类

1.引用静态方法

格式:类名::静态方法

package myFunction;

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;

public class Functiondemo01 {
    public static void main(String[] args) {
        ArrayList<String>  list=new ArrayList<>();
        Collections.addAll(list,"1","2","3","4","5");
       /* list.stream().map(new Function<String,Integer>() {
            @Override
            public Integer apply(String s) {
                int i = Integer.parseInt(s);
                return i;
            }
        }).forEach(s-> System.out.println(s));*/
        list.stream().map(Integer::parseInt).forEach(s-> System.out.println(s));
    }
}

2.引用成员方法

格式:对象::成员方法

其他类:其他类对象::方法名

本类:this::方法名

父类:super::方法名

package myFunction;

import java.util.ArrayList;
import java.util.Collections;

public class Functiondemo02 {
    public static void main(String[] args) {
     ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰");
      //  list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));
list.stream().filter(new StringOperation()::stringJudge).forEach(s-> System.out.println(s));
    }
    
}
package myFunction;

public class StringOperation {
    public boolean stringJudge(String s){
     return s.startsWith("张")&&s.length()==3;
    }
}
package myFunction;

import java.util.ArrayList;
import java.util.Collections;

public class Functiondemo02 {
    public static void main(String[] args) {
     ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰");
      //  list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));
list.stream().filter(new Functiondemo02()::stringJudge).forEach(s-> System.out.println(s));
    }
        public boolean stringJudge(String s){
            return s.startsWith("张")&&s.length()==3;
        }
    }

3.引用构造方法

格式:类名::new

package myFunction;

public class Student {
    private String name;
    private int age;

    public Student() {
    }
    public Student(String str) {
        String []arr=  str.split(",");
        this.name=arr[0];
        this.age=Integer.parseInt(arr[1]);
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package myFunction;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class FunctionDemo03 {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"张无忌,15","周芷若,14","赵敏,13");
  /*List<Student> newList=     list.stream().map(new Function<String,Student>() {
           @Override
           public Student apply(String s) {
            String []arr=  s.split(",");
            String name=arr[0];
           int age=Integer.parseInt(arr[1]);
               return new Student(name,age);
           }
       }).collect(Collectors.toList());
        System.out.println(newList);*/
   List<Student> newList2=list.stream().map(Student::new).collect(Collectors.toList());
        System.out.println(newList2);
    }
}

其他调用方式:

1.使用类名引用成员方法

格式:类名::成员方法

package myFunction;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Locale;
import java.util.function.Function;

public class Funtiondemo04 {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"aaa","bbb","ccc","ddd");
       /* list.stream().map(new Function<String, String>() {
            @Override
            public String apply(String s) {
                return s.toUpperCase();
            }
        }).forEach(s-> System.out.println(s));*/
        list.stream().map(String::toUpperCase).forEach(s-> System.out.println(s));
    }
}

引用数组的构造方法

格式:数组类型[]::new

package myFunction;

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.IntFunction;

public class FunctionDemo05 {
    public static void main(String[] args) {
        ArrayList<Integer> list=new ArrayList<>();
        Collections.addAll(list,1,2,3,4,5);
    /*  Integer[]ar=  list.stream().toArray(new IntFunction<Integer[]>() {
            @Override
            public Integer[] apply(int value) {
                return new Integer[value];
            }
        });
        System.out.println(ar);*/
      Integer[] ar2=  list.stream().toArray(Integer[]::new);
        System.out.println(ar2);
    }
}

相关推荐

  1. 方法引用学习

    2024-03-19 10:42:11       45 阅读
  2. 方法引用(详)

    2024-03-19 10:42:11       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-19 10:42:11       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-19 10:42:11       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-19 10:42:11       82 阅读
  4. Python语言-面向对象

    2024-03-19 10:42:11       91 阅读

热门阅读

  1. LWC 学习资源

    2024-03-19 10:42:11       43 阅读
  2. Android学习深入

    2024-03-19 10:42:11       40 阅读
  3. Django 中 null=True 和 blank=True 的作用

    2024-03-19 10:42:11       35 阅读
  4. 【运维笔记】记录一次SSH登录太慢的问题

    2024-03-19 10:42:11       38 阅读
  5. Function.prototype.bind的用法

    2024-03-19 10:42:11       42 阅读
  6. geemap和ee库简介及常用函数

    2024-03-19 10:42:11       48 阅读
  7. Qt与MFC:跨平台现代化与传统Windows框架的对比

    2024-03-19 10:42:11       38 阅读
  8. Node.js

    Node.js

    2024-03-19 10:42:11      50 阅读
  9. Android FrameWork基础之Makefile

    2024-03-19 10:42:11       41 阅读
  10. Flutter第五弹:Flutter布局

    2024-03-19 10:42:11       49 阅读
  11. vue触发真实的点击 事件 跟用户行为一致

    2024-03-19 10:42:11       42 阅读