首页 > 编程语言 >Java8新特性 - 04 - 方法引用06 - 方式五 【类名[]::new

Java8新特性 - 04 - 方法引用06 - 方式五 【类名[]::new

时间:2022-11-11 16:34:37浏览次数:61  
标签:06 String 04 System integer println new out

参考:https://blog.csdn.net/qq_39505245/article/details/123142780

1.类名[]::new

`1.将Lambda表达式 替换为 【类名[]::new】 的写法。
2.确保 【数组的构造方法】 的 参数与返回值 和 Lambda表达式的一致!` 

2.案例代码

本案例从 匿名内部类 --> Lambda 表达式 --> 方法引用 【类名[]::new】
的思路进行编码演示,一步一步的感受代码的变化。

2.1 准备一个普通的类,包含一个静态方法

`package com.northcastle.H_method_reference;

/**
 * 写一个类,用来调用静态方法的
 */
class ArrayCreate{
    /**
     * 写一个静态方法,可以进行调用的那种
     * @param integer
     * @return
     */
    public static String[] createStringArray(Integer integer){
        // 默认初始化一个10个长度的数组
        if (integer < 1){
            integer = 10;
        }
        String[] res = new String[integer];
        for (Integer i = 0; i < integer; i++) {
            res[i] = "方法引用字符串"+i;
        }
        return res;
    }
}` 



2.2 编写测试主类

`package com.northcastle.H_method_reference;

import java.util.Arrays;
import java.util.function.Function;
import java.util.function.Supplier;

public class ArrayNew {

    public static void main(String[] args) {
        //1.匿名内部类的方法
        Function<Integer,String[]> function01 = new Function<Integer, String[]>() {
            @Override
            public String[] apply(Integer integer) {
                 // 默认初始化一个10个长度的数组
                if (integer < 1){
                    integer = 10;
                }
                String[] res = new String[integer];
                for (Integer i = 0; i < integer; i++) {
                    res[i] = "匿名字符串"+i;
                }
                return res;
            }
        };
        System.out.println("匿名内部类 :"+ Arrays.toString(function01.apply(6)) );
        System.out.println("=====================");
        System.out.println();

        //2.Lambda表达式的方法
        Function<Integer,String[]> function02 =  (integer) -> { // 此时就感觉出来了,并没有减少什么代码量
            // 默认初始化一个10个长度的数组
            if (integer < 1){
                integer = 10;
            }
            String[] res = new String[integer];
            for (Integer i = 0; i < integer; i++) {
                res[i] = "Lambda字符串"+i;
            }
            return res;
        };
        System.out.println("Lambda表达式  :"+Arrays.toString(function02.apply(6)));

        System.out.println("=====================");
        System.out.println();

        //3.方法引用1 :【类名::静态方法】
        /**
         * ArrayCreate::createStringArray 的参数 和 返回值 都与 Function<Integer,String[]>  的 apply 一致,
         * 所以 符合方法调用的使用条件!
         */
        Function<Integer,String[]> function03 = ArrayCreate::createStringArray;
        System.out.println("方法引用  :"+Arrays.toString(function03.apply(6)));
        System.out.println("=====================");
        System.out.println();

        //4.方法引用2 :【类名[]::new】
        /**
         * 1.String[] arrays = new String[6];
         * 2.String[] arrays = function.apply(6);
         *   1中的字符数组的构造方法 与 2中的抽象方法的参数与返回值一致,
         *   故满足方法引用的使用条件,可以正常使用!
         */
        Function<Integer,String[]> function = String[]::new;
        String[] arrays = function.apply(6);
        for (int i = 0; i < arrays.length; i++) {
            arrays[i] = "字符数组构造new :"+i;
        }
        System.out.println("方法引用  :"+Arrays.toString(arrays));
        System.out.println("=====================");
        System.out.println();

    }
}` 


2.3 执行结果

三种方式的运行结果都正确!

在这里插入图片描述

3.完成

Congratulations!
You are one step closer to success!

标签:06,String,04,System,integer,println,new,out
From: https://www.cnblogs.com/kuangke/p/16880913.html

相关文章

  • 强化学习代码实战-04时序差分算法(Q-learning)
    On-policy和Off-policy差异,更新量方式不同Q-learning是srasa的改进版,效果要更好更实用,从悬崖问题中看出,Q-learning智能体可以贴着悬崖达到目标点(而saras总是离悬崖最远......
  • mac中mysql3306端口被占用
    需求:本地mysql端口连到k8s集群中 报错:Unabletolistenonport3306:Listenersfailedtocreatewiththefollowingerrors:[unabletocreatelistener:Errorl......
  • #10067. 「一本通 3.1 练习 2」构造完全图
    给一颗最小生成树,构造一个权和最小的完全图  无疑是贪心,模仿kruskal做法 考虑一条树边,它连接了两个块,在块之间的连线中是最小的,构造完全图后,考虑所有这些连线,权值应......
  • FLAG_ACTIVITY_NEW_TASK 和 taskAffinity
    这俩货在一起可以控制Intent时是否新启动一个任务栈,下面通过实例看一下,这俩货怎么配合才能真正新启动一个任务栈额。一、只设置taskAffinity:MainActivity.java:packagecom.......
  • Ubuntu 20.04 Server 如何用命令行启用中文支持?
    1.安装中文包sudoaptupdatesudoaptinstalllanguage-pack-zh-hans2.将区域语言设置为简体中文localectlset-localeLANG=zh_CN.utf83.重启系统sudoreboot......
  • TR-069第一期第六修正版-12
    3.5使用SOAPCPEWAN管理协议将SOAP1.1[^12]定义为传输附件A中定义的RPC方法调用和响应的编码语法。下面描述了RPC方法到SOAP编码的映射关系:编码必须使用标准的SOAP......
  • loj#10064 黑暗城堡
     求图中的最短路径生成树有多少个?(该生成树中的任意点i,i到1的距离和 原图中的i到1的最短距离相等  跑所有点到1的单源最短路,d[i] ifd[i]==d[y]+z,那么z这个路......
  • 04python基础知识02
    这一篇文章主要介绍函数、模块、运行python文件等知识。函数函数犹如小程序,可以用来执行特定的操作。Python本身提供了很多函数,我们称这些函数为内置函数。内置函数可以......
  • Leetcode第1704题:判断字符串的两半是否相似(Determine is string halves are alike)
    解题思路直接模拟。将字符串分为两半,分别遍历统计各元音出现的次数,最后比较是否相等即可。核心代码如下:boolhalvesAreAlike(strings){stringa=s.substr(......
  • Ubuntu 21.10 (Impish Indri) Reached End of Life, Upgrade to Ubuntu 22.04 LTS Now
    https://9to5linux.com/ubuntu-21-10-impish-indri-reached-end-of-life-upgrade-to-ubuntu-22-04-lts-now......