0
点赞
收藏
分享

微信扫一扫

方法引用(二)

月孛星君 2023-08-21 阅读 36
1、使用类名引用成员方法

格式:类名::成员方法 例如:Student::show

1.1、练习:集合里面的一些字符串,要求变成大写后输出。

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

public class Test {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "aa", "bb", "cc", "dd");

        list.stream().map(new Function<String, String>() {
            @Override
            public String apply(String s) {
                return s.toUpperCase();     //返回大写形式
            }
        }).forEach(n -> System.out.println(n));
        System.out.println("-----------------------------------");

        //改成方法引用
        list.stream().map(String::toUpperCase).forEach(n -> System.out.println(n));

    }

}

使用这种方式的抽象方法参数详解:

①、第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法,在Stream流中,第一个参数一般表示流里面的每一个数据,假设流里面的数据是字符串,那么使用这种方式进行方法引用,只能引用String这个类中的方法。

②、第二个参数到最后一个参数:跟被引用方法的形参保持一致,如果没有第二个参数,说明被引用的方法需要是无参的成员方法。

2、引用数组的构造方法

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

细节:数组的类型需要跟流中的数据类型一致

练习:集合中存储一些整数,收集到数组中

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

public class Test {
    public static void main(String[] args) {
        test02();

    }

    public static void test02() {
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list, 1, 2, 3, 4, 5);

        Integer[] arr1 = list.stream().toArray(new IntFunction<Integer[]>() {
            @Override
            public Integer[] apply(int value) {
                return new Integer[value];
            }
        });
        System.out.println(Arrays.toString(arr1));
        System.out.println("-----------------------------------");

        //改成引用数组的构造方法
        Integer[] arr2 = list.stream().toArray(Integer[]::new);
        System.out.println(Arrays.toString(arr2));

    }

}

举报

相关推荐

0 条评论