循循渐进详解内部类和Lambda表达式

VIPER22A实战:从零搭建15W非隔离电源,附BUCK电路调试心得 本文详细介绍了使用VIPER22A芯片从零搭建15W非隔离电源的全流程,重点解析BUCK电路设计与调试技巧。通过核心参数计算、PCB布局优化和效率提升方案,帮助工程师快速掌握DC-DC电源设计要点,实现高效稳定的电源转换。 阅读详情

内部类 与 Lambda表达式

一、内部类

程序在开发中为了更加准确地描述结构体的作用,提供有各种嵌套结构,而程序类也是允许嵌套的。

内部类(内部定义普通类、抽象类、接口的统称)是指一种嵌套的结构关系,说白了就是,在一个类(假设为A)内部还定义了一个类(假设为B)。

当然,A类和B类中都可以有属性和方法,下面,给个例子。

范例:定义内部类

package edu.blog.test18.inner01;

//外部类
public class Outer {
    //私有成员属性
    private String msg = "Hello World";

    //get方法
    public String getMsg() {
        return this.msg;
    }

    //外部类成员方法
    public void fun() {
        System.out.println("OuterClass--fun");
        //实例化内部类对象
        InnerClass innerClass = new InnerClass();
        //调用内部类的方法
        innerClass.print();
    }

    //内部类
    class InnerClass {
        //内部类成员方法
        public void print() {
            System.out.println("InnerClass--print");
            //内部类的方法 输出 外部类的成员属性
            System.out.println(Outer.this.msg);
        }
    }
}

测试类:

package edu.blog.test18.inner01;

public class InnerTestDemo01 {
    public static void main(String[] args) {
        //实例化 外部类对象
        Outer outerClass = new Outer();
        //调用外部类的方法
        outerClass.fun();
    }
}

/*
执行结果:
OuterClass--fun
InnerClass--print
Hello World
 */

本程序从代码理解难度并不大,核心的结构就是在Outer.fun()方法里实例化了内部类的对象,并且利用内部类中的print()方法直接输出了外部类中msg私有成员属性。

从类的组成来讲主要就是成员属性与方法,但是此时在一个类的内部又定义了若干个内部类结构,使得程序代码的结构非常的混乱,那么为何还要这么定义呢?

其实,实质上内部类在整体设计中最大的缺点就是破坏了良好的程序结构,但是最大的优点在于可以方便地访问外部类中的私有成员。

同时,外部类也同样可以访问内部类的私有成员。注意,内部类本身就是一个独立的结构,这样在进行普通成员属性访问时,为了明确地标记出属性是外部类所提供的,可以采用外部类.this.属性的形式进行标注。

范例:外部类访问内部类私有成员

外部类:

package edu.blog.test18.inner02;

//外部类
public class Outer {
    //外部类私有成员属性
    private String msg = "Hello World";

    //外部类公共方法
    public void fun() {
        //实例化内部类对象
        Inner in = new Inner();
        //通过内部类对象调用内部类方法
        in.print();
        //外部类访问内部类的私有属性
        System.out.println(in.info);
    }

    //内部类
    class Inner {
        //内部类私有成员
        private String info = "Java";

        //内部类公共方法
        public void print() {
            //访问Outer类中的私有成员属性
            System.out.println(Outer.this.msg);
        }
    }
}

测试类:

package edu.blog.test18.inner02;

public class InnerTestDemo {
    public static void main(String[] args) {
        //实例化外部类对象
        Outer outer = new Outer();

        //调用外部类的方法
        outer.fun();
    }
}

/*
执行结果:
Hello World
Java
 */

本程序在内部类中利用Outer.this.msg的形式调用外部类中的私有成员属性,而在外部类中也可以直接利用内部类的对象访问内部类的私有成员。


2、实例化内部类

值得注意的是,内部类虽然被外部类包裹,但是其本身也属于一个完成类,所以也可以直接进行内部类对象的实例化,可以使用以下的语法格式:

外部类.内部类 内部类对象 = new 外部类().new内部类();

//也上面的程序为例
Outer.Inner inner = new Outer().Inner();

由语法的格式可以看出,必须先获取相应的外部类实例化对象后,才可以利用外部类的实例化对象进行内部类对象实例化操作。

Tips:关于内部类的字节码文件名称。

当进行内部类源代码编译后,就会发现一个Outer$Inner.class字节码文件,其中所使用的标识符"$"在程序中会转化为".",所以内部类的全称就是“外部类.内部类”,由于内部类与外部类之间可以直接进行私有成员的访问,这就就必须保证在实例化内部类对象前先实例化外部类对象。


3、内部类私有化

如果说现在一个内部类不希望被其他类所调用,那么可以使用private关键字将这个内部类定义为私有内部类。

范例:内部类私有化

package edu.blog.test18.inner03;

//外部类
public class Outer {
    //私有成员变量
    private String msg = "Hello World";

    //内部类
    private class Inner {
        public void print() {
            //Outer类中的私有成员变量
            System.out.println(Outer.this.msg);
        }
    }
}

此时,Inner类使用了private定义,表示此类只允许被Outer一个类中使用。


4、内部接口

内部类不仅可以在类中定义,也可以应用在接口和抽象类之中,即可以定义内部的接口或内部抽象类。

范例:定义内部接口

package edu.blog.test18.inner04;

//外部接口
public interface IChannel {
    //抽象方法,发送消息
    public abstract void send(IMessage msg);

    //内部接口
    interface IMessage{
        //抽象方法,获取内容
        public abstract String getContent();
    }
}
package edu.blog.test18.inner04;

//外部接口实现子类
public class ChannelImpl implements IChannel {
    //重写方法
    @Override
    public void send(IMessage msg) {
        System.out.println("发送的消息:" + msg.getContent());
    }

    //内部接口实现子类(不是必须实现)
    class MessageImpl implements IMessage {
        //重写方法
        @Override
        public String getContent() {
            return "Hello World";
        }
    }
}

测试类:

package edu.blog.test18.inner04;

public class TestDemo {
    public static void main(String[] args) {
        //实例化外部接口实现子类
        IChannel channel = new ChannelImpl();

        //实例化 内部类接口实现子类 前需要先获取外部类实例化对象
        IChannel.IMessage message = new ChannelImpl().new MessageImpl();
        channel.send(message);
    }
}

/*
执行结果:
发送的消息:Hello World
*/

本程序使用内部类的形式定义了接口,并且分别为外部接口和内部接口定义了各自的子类。由于IMessage是内部接口,所以定义MessageImpl子类的时候也采用了内部类的定义形式。


5、静态内部类

static定义的结构可以不受类的使用制约,内部类在嵌套定义时,也可以使用static定义独立的类结构体。

静态内部类,即使用static关键字定义的内部类不再受到外部类实例化对象的影响,所以等同于一个“外部类”,内部类的名称为“外部类.内部类”。

使用static关键字定义的内部类只能够调用外部类中static定义的结构,并且在进行内部类实例化的时候也不再需要先获取外部类实例化对象,static内部类对象实例化格式:

外部类.内部类 内部类对象 = new 外部类.内部类();

范例:使用static定义内部类

package edu.blog.test18.inner05;

public class Outer {
    //static属性
    private static final String MSG = "Hello World";

    //static内部类
    static class Inner {
        //访问static属性
        public void print() {
            System.out.println("print()---" + Outer.MSG);
        }
    }
}

测试类:

package edu.blog.test18.inner05;

public class TestDemo {
    public static void main(String[] args) {
        //实例化内部类对象
        Outer.Inner inner = new Outer.Inner();
        inner.print();
    }
}

/*
执行结果:
print()---Hello World
 */

本程序在Outer类的内部使用static关键字定义了Inner内部类,这样内部类就成为一个独立的外部类,在外部类实例化对象时内部类的完整名称将为Outer.Inner。


6、局部内部类

局部内部类是定义在一个方法或者一个作用域(代码块)里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。但是,局部内部类就像是方法里面的一个局部变量一样,不能用public、protected、private以及static修饰符的。

因此,如果需要用局部内部类定义变量、创建实例或派生子类,那么都只能在局部内部类所在的方法或者代码块中进行。

范例:定义局部内部类(方法中)

package edu.blog.test18.inner06;

//外部类
public class Outer {
    //外部类属性
    private String msg = "Hello World";

    //外部类方法
    public void fun(int count01) {
        //方法中定义内部类
        class Inner {
            //内部类方法
            public void print(int count02) {
                //外部类私有属性
                System.out.println("外部类私有属性--" + Outer.this.msg);
                //外部类方法参数
                System.out.println("外部类方法参数--" + count01);
                //内部类方法参数
                System.out.println("内部类方法参数--" + count02);
            }
        }

        //在方法中直接 实例化内部类对象
        new Inner().print(888);
    }
}

测试类:

package edu.blog.test18.inner06;

public class TestDemo {
    public static void main(String[] args) {
        //实例化外部类对象 并调用外部类方法
        new Outer().fun(666);
    }
}

/*
执行结果:
外部类私有属性--Hello World
外部类方法参数--666
内部类方法参数--888
 */

本程序在Outer.fun()方法中定义了内部类Inner,并且在Inner内部类中实现了外部类中成员属性和方法参数的访问,可知局部内部类可随意访问外部类的成员变量和方法,即使是私有的。


7、匿名内部类

最后,我们来说一说最后一种内部类内,叫做匿名内部类。

顾名思义,所谓的匿名内部类就是一个没有显式的名字的内部类,其本质为匿名内部类会隐式地继承一个类或者实现一个接口,或者说,匿名内部类是一个继承了该类或者实现了该接口的子类匿名对象。

在实际开发中,此种内部类用的是非常多的,以使用一个接口为例子,似乎得做如下几步操作:

  1. 定义子类实现接口
  2. 重写接口中的方法
  3. 创建子类对象
  4. 调用重写后的方法

而我们的目的,最终只是为了调用方法,那么能不能把以上四步简化合成一步呢?匿名内部类就是做这样的快捷方式。

前提:匿名内部类必须继承一个父类或者实现一个父接口。

格式:

new 父类名或者接口名(){
	// 方法重写
	@Override
	public void method() {
		// 执行语句
	}
};

接下来我们,以接口为例子,才展示以下匿名内部类的使用。

定义接口:

package edu.blog.test18.inner07;

//定义一个父接口
public interface Flyable {
    //抽象方法 fly()
    public abstract void fly();
}

测试类:

package edu.blog.test18.inner07;

public class TestDemo {
    public static void main(String[] args) {
        /*
        	创建匿名内部类,并调用方法。
        	等号右边:是匿名内部类,定义并创建该接口的子类对象
        	等号左边:是多态赋值,接口类型引用指向子类对象
        */
        Flyable f = new Flyable() {
            //重写接口中的fly()方法
            @Override
            public void fly() {
                System.out.println("我是匿名内部类");
                System.out.println("我会飞啦啦啦~~");
            }
        };

        //调用 fly()方法
        f.fly();

        /*
        new Flyable() {
            @Override
            public void fly() {
                System.out.println("我是匿名内部类");
                System.out.println("我会飞啦啦啦~~");
            }
        }.fly();
         */
    }
}

/*
执行结果:
我是匿名内部类
我会飞啦啦啦~~
 */

有时后,我们某个方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递,代码如下:

package edu.blog.test18.inner07;

public class TestDemo02 {
    public static void main(String[] args) {

        /*
        创建匿名内部类,直接传递给showFly(Flyable f)
         */
        showFly(new Flyable() {
            @Override
            public void fly() {
                System.out.println("真不巧,我还是会飞~~");
            }
        });
    }

    public static void showFly(Flyable f) {
        f.fly();
    }
}

/*
执行结果:
我依旧会飞~~
真不巧,我还是会飞~~
 */

二、Lambda表达式

1、函数式编程思想概述

在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。

  • 面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情
  • 函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程。

2、Lambda表达式初体验

案例需求:启动一个线程,在控制台输出一句话:多线程程序启动了。

  1. 实现方式一

    实现步骤:

    1. 定义一个类MyRunnable实现Runnable接口,重写run()方法;
    2. 创建MyRunnable类的对象;
    3. 创建Thread类的对象,把MyRunnable的对象作为构造参数传递;
    4. 启动线程。
  2. 实现方式二

    匿名内部类的方式改进。

  3. 实现方式三

    Lambda表达式的方式改进。

代码如下:

package edu.blog.test18.lambda01;

//方式一的线程类
public class MyRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println("我是方式一,多线程启动了~");
    }
}

package edu.blog.test18.lambda01;

public class LambdaTestDemo {
    public static void main(String[] args) {
        /*
        方式一:传统方法
         */
        Runnable myRun = new MyRunnable();
        Thread thread = new Thread(myRun);
        thread.start();

        /*
        方式二:匿名内部类
         */
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("我是方式二,多线程启动了~");
            }
        }).start();

        /*
        方式三:Lambda表达式
         */
        new Thread(() -> {
            System.out.println("我是方式三,多线程启动了~");
        }).start();
    }
}

/*
执行结果:
我是方式一,多线程启动了~
我是方式二,多线程启动了~
我是方式三,多线程启动了~
 */

3、Lambda表达式的标准格式

  • 组成Lambda表达式的三要素:

    形式参数、箭头、代码块。

  • 格式:

    (形式参数) -> {代码块}

    1. 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可;
    2. ->:由英文中画线和大于符号组成,固定写法,代表指向动作;
    3. 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容

4、Lambda表达式的使用前提

Lambda的语法非常简洁,完全没有面向对象复杂的束缚。

但是使用时有几个问题需要特别注意:

  1. 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法

    无论是JDK内置的Runnable、Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda表达式。

  2. 使用Lambda必须具有上下文推断

    也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。

备注:有且仅有一个抽象方法的接口,称为“函数式接口”。


5、Lambda表达式的练习

5.1、无参无返回值的抽象方法

示例代码:

/*
需求:
1. 定义一个接口(Eatable),里面定义一个抽象方法:void eat();
2. 定义一个测试类(EatableDemo),在测试类中提供两个方法:
	一个方法是:useEatable(Eatable e);
    一个方法是主方法,在主方法中调用useEatable方法。
*/
package edu.blog.test18.lambda02;

//接口
public interface Eatable {
    public abstract void eat();
}
package edu.blog.test18.lambda02;

//实现类
public class EatableImpl implements Eatable{
    @Override
    public void eat() {
        System.out.println("我爱吃苹果~");
    }
}
package edu.blog.test18.lambda02;

public class EatableDemo {
    public static void main(String[] args) {
        //在主方法中调用useEatable方法
        Eatable e = new EatableImpl();
        useEatable(e);

        //匿名内部类
        useEatable(new Eatable() {
            @Override
            public void eat() {
                System.out.println("我爱吃荔枝~");
            }
        });

        //Lambda表达式
        useEatable(() -> {
            System.out.println("我爱吃芒果~");
        });
    }

    private static void useEatable(Eatable e) {
        e.eat();
    }
}

/*
执行结果:
我爱吃苹果~
我爱吃荔枝~
我爱吃芒果~
 */
5.2、有参无返回值的抽象方法

示例代码:

/*
需求:
1. 定义一个接口(Flyable),里面定义一个抽象方法:void fly(String s);
2. 定义一个测试类(FlyableDemo),在测试类中提供两个方法:
	一个方法是:useFlyable(Flyable f)
	一个方法是主方法,在主方法中调用useFlyable方法
*/
package edu.blog.test18.lambda03;

//接口类
public interface Flyable {
    public abstract void fly(String s);
}
package edu.blog.test18.lambda03;

//测试类
public class FlyableDemo {
    public static void main(String[] args) {
        //在主方法中调用useFlyable方法

        //匿名内部类
        useFlyable(new Flyable() {
            @Override
            public void fly(String s) {
                System.out.println(s);
                System.out.println("飞机自驾游");
            }
        });
        System.out.println("--------");

        //lambda表达式
        useFlyable((String s) -> {
            System.out.println(s);
            System.out.println("飞机自驾游");
        });
    }

    private static void useFlyable(Flyable f) {
        f.fly("风和日丽,晴空万里");
    }
}

/*
执行结果:
风和日丽,晴空万里
飞机自驾游
--------
风和日丽,晴空万里
飞机自驾游
 */
5.3、有参有返回值的抽象方法

示例代码:

/*
需求:
1. 定义一个接口(Addable),里面定义一个抽象方法:int add(int x,int y);
2. 定义一个测试类(AddableDemo),在测试类中提供两个方法:
	一个方法是:useAddable(Addable a)
	一个方法是主方法,在主方法中调用useAddable方法
*/
package edu.blog.test18.lambda04;

//接口类
public interface Addable {
    public abstract int add(int x, int y);

package edu.blog.test18.lambda04;

public class AddableDemo {
    public static void main(String[] args) {
        useAddable((int x, int y) -> {
            return x + y;
        });
    }

    private static void useAddable(Addable a) {
        System.out.println(a.add(333, 333));
    }
}

/*
执行结果:
666
 */

6、Lambda表达式的省略模式

Lambda表达式的省略规则:

  • 参数类型可以省略,但是有多个参数的情况下,不能只省略一个;
  • 如果参数有且仅有一个,那么小括号可以省略;
  • 如果代码块的语句只有一条,可以省略大括号和分号,和return关键字。

示例代码:

package edu.blog.test18.lambda05;

public interface Addable {
    public abstract int add(int x, int y);
}
package edu.blog.test18.lambda05;

public interface Flyable {
    public abstract void fly(String s);
}
package edu.blog.test18.lambda05;

public class LambdaTestDemo {
    public static void main(String[] args) {

        useAddable((int x, int y) -> {
            return x + y;
        });

        //参数的类型可以省略
        useAddable((x, y) -> {
            return x + y;
        });

        useFlyable((String s) -> {
            System.out.println(s);
        });

        //如果参数有且仅有一个,那么小括号可以省略

        useFlyable(s -> {
            System.out.println(s);
        });

        //如果代码块的语句只有一条,可以省略大括号和分号

        useFlyable(s -> System.out.println(s));

        //如果代码块的语句只有一条,可以省略大括号和分号,如果有return,return也要省略掉
        useAddable((x, y) -> x + y);
    }

    private static void useFlyable(Flyable f) {
        f.fly("风和日丽,晴空万里");
    }

    private static void useAddable(Addable a) {
        int sum = a.add(10, 20);
        System.out.println(sum);
    }
}

/*
执行结果:
30
30
风和日丽,晴空万里
风和日丽,晴空万里
风和日丽,晴空万里
30
 */

7、Lambda表达式和匿名内部类的区别

  1. 所需类型不同

    • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类;
    • Lambda表达式:只能是接口。
  2. 使用限制不同

    • 如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类;
    • 如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式。
  3. 实现原理不同

    • 匿名内部类:编译之后,产生一个单独的.class字节码文件;

    • Lambda表达式:编译之后,没有一个单独的.class字节码文件,对应的字节码会在运行的时候动态生成。


注:此文章为个人学习笔记,如有错误,敬请指正。

PyTorch生成式人工智能(25)——基于Transformer实现机器翻译 不同于循环神经网络 (RNN) 按顺序处理数据,Transformer 以并行的方式处理输入数据(例如句子)。这种并行处理提高了效率,但并未使其能够识别输入的顺序。为了解决这个问题,Transformer 向输入的词嵌入中添加了位置编码。这些位置编码是分配给输入序列中每个位置的独特向量,其维度与输入词嵌入对齐。本节将以英语到法语的翻译为例,通过介绍如何训练 Transformer 模型将英语句子转换为法语,深入理解 Transformer 的架构及自注意力机制的运作方式。 阅读详情

相关推荐

产品经理如何运用AI提升工作效率

AI技术的应用为产品经理的工作流程带来了显著的效率提升。从需求收集到产品上线,AI可以在多个阶段提供智能化支持,帮助产品经理更好地理解用户需求、优化产品设计、提高开发和测试效率。在未来,随着AI技术的不断发展,产品经理将能够更加高效地管理产品生命周期,为用户提供更优质的产品体验。应用 | AI + 千行百业欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

不想宅的冷同学 1336

Wilks’ Lambda 检验结果怎么看

Wilks' Lambda 检验是一种用来评估多元分类器表现的统计检验。结果中的 Lambda 值越小,说明分类器表现越好。通常,在给定显著性水平下,如果 p-value 小于等于该显著性水平,则可以拒绝原假设并认为分类器表现有统计学差异。 ...

weixin_35755434的博客 1975

告别手动归档:基于Allegro Skill的XTools一键生成Gerber与生产文件实践

本文详细介绍了基于Allegro Skill的XTools工具如何实现一键生成Gerber与生产文件,大幅提升PCB设计效率。通过自动化流程,解决了传统手动归档中的重复劳动、人为失误和标准不统一等问题,特别适合需要频繁输出生产文件的工程师。文章包含安装配置、实战操作、问题排查及进阶技巧,帮助用户快速掌握这一高效工具。

weixin_30505225的博客 460

Lambda表达式

简化程序的编写,避免匿名内部类定义过多,其实属于函数式编程的概念。 函数式接口定义:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。 对于函数式接口,我们可以通过lambda表达式创建该接口的对象。 一般情况下我们实现一个函数式接口都是下面这样的操作 public class TestLambda { public static void main(String[] args) { Lam lam = new Lam(); //调用实现方法 lam.lambda(); }.

qq_45162113的博客 194

基于MATLAB/Simulink与WSL2的ROS2实时联合仿真实践

本文详细介绍了基于MATLAB/Simulink与WSL2的ROS2实时联合仿真实践。通过环境配置、PX4仿真环境搭建、自定义消息生成、Simulink通信实现及实时优化等步骤,提供了完整的无人机位置控制案例,帮助开发者实现高精度的实时联合仿真。

red88的博客 202

可变形卷积(Deformable Conv)原理解析与torch代码实现

图6为可变形卷积示意图。图1所示为普通卷积在输入特征图上进行卷积计算的过程,卷积核大小为3*3,在输入特征图尺寸为7*7上进行卷积,将卷积核权重与输入特征图对应位置元素相乘并求和得到输出特征图元素,按一定方式滑动窗口就能计算得到整张输出特征图。图6所示,在input feature map上普通卷积操作对应卷积采样区域是一个卷积核大小的正方形(绿框),而可变形卷积对应的卷积采样区域为一些蓝框表示的点,这就是可变形卷积与普通卷积的区别。先来一张图感受一下,图3为标准卷积与可变形卷积的卷积示例。

panghuzhenbang的博客 5万+

lamada表达式和匿名内部类的区别

Lambda表达式和匿名内部类的区别所需类型不同  ●匿名内部类:可以是接口,也可以是抽象类,还可以是具体类  ●Lambda表达式:只能是接口使用限制不同  ●如果接口中有且仅有一一个抽象方法,可以使用L ambda表达式,也可以使用匿名内部类  ●如果接口中多 于一个抽象方法,只能使用匿名内部类,而不能使用L ambda表达式实现原理不同  ●匿名内部类:编译之后,产生-一个单独的....

august197210的博客 222

麒麟银河操作系统V10部署ffmpeg(也能用于Linux系统)

部署ffmpeg用来处理视频的各种操作,如编码解码,格式转换,剪辑,处理实时视频流,音频流,加滤镜等

zhouwenxing666的博客 9035

Lambda表达式和函数式编程

文章目录Lambda表达式和函数式编程一、Lambda表达式1.1、函数式编程思想概述1.2、演示冗余的Runnable代码1.3、Lambda标准格式1.4、Lambda表达式有无参数及其格式省略1.5、Lambda表达式是匿名内部类的‘语法糖’?1.6、Lambda表达式的注意事项二、函数式编程及常用接口2.1、性能浪费的例子:2.2、常用的函数式接口2.2.1、Supplier接口——生产数2.2.2、Consumer接口——消费数2.2.3、Predicate接口——逻辑运算2.2.4、Functi

LH is programming hard 937

银河麒麟V10新特性解析:从安装到AI应用的全面指南

本文全面解析银河麒麟V10操作系统的新特性,从安装指南到AI应用开发,详细介绍了其智能调度引擎、神经网络加速和场景化AI工具集等核心功能。通过实战案例展示如何高效配置AI环境、优化性能,并解决常见问题,助力开发者在国产操作系统上实现高效AI开发与应用部署。

seed的博客 299

54、生物神经网络建模全解析

本文系统解析了生物神经网络的建模方法,涵盖从单个神经元到神经网络的多个时空尺度。首先介绍神经元层面的生物物理模型(如霍奇金-赫胥黎模型和多隔室模型)与多种简化模型(如菲茨休-纳古莫、莫里斯-勒卡尔、积分发放模型等),并分析其适用场景。随后探讨突触层面的信号传递机制,对比电突触与化学突触在结构、传输速度和方向上的差异,阐述其在神经网络建模中的理论意义。文章旨在为理解神经系统的信息处理机制、构建受生物启发的人工智能模型提供理论基础。

app77的博客 76

【学习笔记】Java函数式编程01-Lambda表达式

看懂代码提高处理大数据量集合的效率代码可读性提升消灭嵌套地狱(反复的嵌套for …if …for …if …导致可读性下降Lambda表达式可以理解为JDK8新增了一个语法糖。对某一些匿名内部类的写法进行简化。是函数式编程的重要体现让程序员不用关注对象,而关注对数据的操作语法糖(Syntactic sugar),也译为糖衣语法[外链图片转存中…(img-ultqjqy9-1703122023748)]指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。

Xcong_Zhu的博客 1218

git clone出现fatal: unable to access Failed to connect to github.com port 443: Timed out解决方案

本文主要介绍了git clone出现fatal: unable to access Failed to connect to github.com port 443: Timed out解决方案,希望能对使用git的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 23万+

lamda表达式的循序渐进过程

lamda表达式的前提是一个接口中只有一个抽象类方法 public class Lamda { public static void main(String[] args) { Like like=new Ilike(); like.like(520); } } interface Like{ void like(int a); } //1.类实现 class Ilike implements Like{ @Override pu

qq_40875283的博客 184

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java 8 的Lambda 表达式

早在2014年oracle发布了jdk 8,在里面增加了lambda模块。于是java程序员们又多了一种新的编程方式:函数式编程,也就是lambda表达式。 一、什么是函数式编程 函数式编程(functional programming)或称函数程序设计,又称泛函编程,是一种编程典范,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda...

zjgyjd的博客 165

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java_Lambda表达式

Lambda表达式 Lambda是JDK8中一个语法糖。他可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。 格式: (参数列表)->{代码} 小括号 和 大括号 都还可以省略 语法糖: 简单的说,语法糖就是一种便捷写法。就相当于汉语里的成语。 idea tip: ctrl+p 查看传参提示 public class LambdaDemo_01 { public static void main(

beginner的博客 148

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

多线程06--函数式接口与Lambda表达式

引言 学习Lamda表达式就有必要学习下函数式接口,所以本文分两大部分:函数式接口、Lambda表达式,循序渐进完成从函数式接口到Lambda表达式的推导式学习。 1.函数式接口 1.1定义 "函数式接口"是JAVA8 新特性,一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,使用@FunctionalInterface注解,如果注释@FunctionalInterface在非函数式接口或其他类型(如类)上注释,则会发生编译时错误。具有一个抽象方法的接口仍然是一个功能接口,即使我们不用@.

liulianglin的专栏 355

Lambda表达式&Stream流(从入门到精通,通俗易懂)

Lambda表达式是Java编程语言中引入的一个重要特性,它是一种轻量级的匿名函数,也可以理解为一种简洁的语法糖。Lambda表达式的引入主要是为了支持函数式编程风格,让Java更好地适应现代编程的需求。

YYVeryGood的博客 2935

Java-Lambda表达式

摘要:本文介绍了Java8中的Lambda表达式,它是一种简化代码的重要特性。Lambda允许将函数作为方法参数传递,使代码更加简洁紧凑。文章详细讲解了Lambda的特点、语法结构和使用场景,并通过代码示例展示了从传统实现类到Lambda的逐步简化过程。重点阐述了函数式接口的定义和作用,指出只有一个抽象方法的接口才能使用Lambda。最后总结了Lambda的简化规则:单行代码可省略花括号,单参数可省略类型和括号。

weixin_53004298的博客 419

DeltaSplice-Human模型架构深度剖析:卷积核大小与膨胀率如何影响预测性能

DeltaSplice-Human是一款基于深度学习的RNA剪接位点预测工具,通过创新的卷积核设计与膨胀率策略,实现对人类基因序列中剪接位点使用(SSU)和剪接突变效应的精准预测。该模型采用24层扩张残差编码器结构,结合多尺度特征提取能力,在30kb长序列上下文中实现高精度剪接模式分析。 ## 核心架构解析:从序列到剪接信号的智能转换 🧠 DeltaSplice-Human的网络架构采用**

gitblog_00098的博客 506

lambda表达式的分析及使用

本篇博客详细讲述了lambda表达式的组成、使用、注意事项。欢迎您来访问。

aaaPostcard的博客 1982

Java-Lambda笔记总结(一)

Java-Lambda表达式总结通过比较的方式初步理解Lambda表达式普通写法匿名内部类写法Lambda表达式写法渐进了解Lambda表达式匿名内部类与Lambda的区别语法小结:具体格式Lambda表达式对接口的要求,函数式接口讲解Lambda表达式对接口的要求注解@FunctionalInterface内置式函数式接口(四个)代码案例 通过比较的方式初步理解Lambda表达式 普通写法 以前...

G在左,M在右 527

Java核心技术解析从Lambda表达式到模块化系统的深度实践

从Lambda表达式到模块化系统,Java语言的演进始终围绕提升开发效率、代码质量和系统可维护性展开。Lambda赋予了Java表达现代编程范式的强大能力,而JPMS则为构建安全、可控的大型应用奠定了坚实的架构基础。深入理解并协同运用这两大核心特性,是每一位Java开发者迈向高阶水平的必经之路,能够帮助我们在复杂的软件系统中写出更清晰、更健壮、更易于演进的代码。

ibrahim9958的博客 724

Java8 lambda表达式

一、Java8新特性 Java8最大的变化就是引入了lambda表达式,一种紧凑的传递行为的方式,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等,主要新特性如下: Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 方法引用 −方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的...

希望我的博客,能解决你工作中的问题 423

Java8中的Lambda表达式

Jdk8中Lambda模块,使java又多了一种新的编程方式,函数式编程,也就是lambda表达式。什么是函数式编程? 函数式编程 函数式编程(英语:functional programming)或称函数程序设计,又称泛函编程,是一种编程典范,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以...

BatFor的博客 197
上一篇: 详解Java编码与解码以及常见的编码表,灵活处理乱码问题
下一篇: static关键字与代码块
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窝在角落里学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值