01.java8入门

函数式编程的不变模式


import java.util.Arrays;

/**
 * 函数式编程的不变模式
 */
public class ArrStream {
    public static void main(String[] args){
        int[] arr = {1,2,3,4,5};
        Arrays.stream(arr).map((x)->x+1).forEach(System.out::print);
        System.out.println();
        Arrays.stream(arr).forEach(System.out::print);
    }
    //23456
    //12345
}

FunctionalInterface注解

/**
 * FunctionalInterface注解
 */
@FunctionalInterface //用于表明是一个函数式接口
public  interface IntHandler {
    void handle(int i);//只包含一个抽象方法
}
@FunctionalInterface //用于表明是一个函数式接口
public  interface IntHandler {
    boolean equals(Object obj);//此时编译未通过,不是函数式接口,因为equals()方法在java.lang.Object中已经实现
}
/**
 * 符合函数式接口要求
 */
@FunctionalInterface //用于表明是一个函数式接口
public  interface IntHandler {
    boolean equals(Object obj);
    void handle(int i);
}

接口的默认方式--default关键字

public interface IHorse {
    void eat();
    //使用default关键字,可以在接口内定义实例方法
    default void run(){
        System.out.println("Horse run");
    }
}
public interface IAnimal {
    default void breath(){
        System.out.println("breath");
    }
}
public interface IDonkey {
    void eat();
    default void run(){
        System.out.println("Donkey run");
    }
}

/**
 * 同时拥有不同接口的实现方法
 */
public class Mule implements IAnimal,IHorse,IDonkey {
    @Override
    public void eat() {
        System.out.println("Mule eat");
    }
    @Override
    public void run(){
        IHorse.super.run();
    }
    public static void main(String[] args){
        Mule mule = new Mule();
        mule.run();
        mule.breath();
    }
    //Horse run
    //breath
}

import java.util.function.Function;

/**
 * lambda表达式访问外部的局部变量
 */
public class LambdaTest {
    public static void main(String[] args){
        final int num = 2;//外部的变量必须申明为final,即使省略final也可以编译通过,这是因为Java8会自动将lambda表达式中使用的变量视为final
        Function<Integer,Integer> st = (from)->from*num;
        System.out.println(st.apply(3));
        int num2 = 3;
        Function<Integer,Integer> st2 = (from)->from*num2;
        num2++;//编译保错 Error:(14, 54) java: 从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量
    }
}

import java.util.ArrayList;
import java.util.List;

/**
 * 方法引用:
 * 静态方法引用:ClassName::methodName
 * 实例上的实例方法引用:instanceReference::methodName
 * 超类上的实例方法引用:super:methodName
 * 类型上的实例方法引用:ClassName::methodName
 * 构造方法引用:Class::methodName
 * 数组构造方法引用:TypeName[]::methodName
 *
 * 方法引用使用::定义,::前半部分表示类名或实例名,后半部分表示方法名称,如果是构造函数,则使用new表示
 */
public class InstanceMethodDemo {
    static class User{
        private int id;
        private String name;

        public User(int id, String name) {
            this.id = id;
            this.name = name;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
    public static void main(String[] args){
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            users.add(new User(i,"name"+Integer.toString(i)));
        }
        //User::getName,在执行时,java会自动识别流中的元素(这里指User实例)是作为调用目标还是调用方法的参数,
        //显然应该作为调用目标,在这里调用每一个User对象实例的getName()方法,并将这些User的name作为一个新的流,
        //同时,对于这里得到的所有name,使用方法引用System.out::println进行处理。系统会自动判断,流内的元素此时
        //应该作为方法的参数传入,而️不是调用目标

        // 一般来说,如果使用的是静态方法,或者调用目标明确,那么流内的元素会自动作为参数使用。如果函数引用表示
        //实例方法,并且不存在调用目标,那么流内元素就会自动作为调用目标
        users.stream().map(User::getName).forEach(System.out::println);
    }
    //name0
    //name1
    //name2
    //name3
    //name4
    //name5
    //name6
    //name7
    //name8
    //name9
}
import java.util.ArrayList;
import java.util.List;

public class ConstrMethodRef {
    public static void main(String[] args){
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            users.add(uf.create(i,"name"+Integer.toString(i)));
        }
        users.stream().map(User::getName).forEach(System.out::println);
    }
    //User::new创建接口实例时,系统会根据UserFactory.create()的函数签名来选择合适的User构造函数
    //在这里,很显然就是 public User(int id, String name),在创建UserFactory.create()的调用
    //都会委托给User的实际构造函数进行,从而创建User对象实例。
    static UserFactory<User> uf = User::new;
    @FunctionalInterface
    interface UserFactory<U extends User>{
        U create(int id,String name);
    }
    static class User{
        private int id;
        private String name;

        public User(int id, String name) {
            this.id = id;
            this.name = name;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

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

转载于:https://www.cnblogs.com/fly-book/p/11492471.html

【35】软考软件设计师——设计模式代码填空(C++版)满分精讲|第5/6题二选一必考 本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第35篇,聚焦下午选做题**第5/6题C++版设计模式代码填空**,与上一篇Java版形成双子配套,单题分值稳定12~15分。全文超4000字深度拆解C++独有核心考点:虚函数/纯虚函数、构造与析构函数规范、继承权限、模板类编程在设计模式中的应用;精讲单例、工厂、策略、观察者、适配器五大高频模式的C++专属代码写法,标注所有填空核心点位、语法陷阱、内存安全规范 阅读详情

相关推荐

Cursor Agent模式下如何优雅切换conda环境运行Python脚本?3种实用方法实测

本文针对Cursor Agent模式下运行Python脚本时环境错配的痛点,实测了三种优雅切换conda环境的实用方法。通过Shell全局配置、项目级.cursorrc文件定制以及对话中直接指令,开发者可以确保AI助手在正确的虚拟环境中执行代码,从而提升开发效率和协作流畅度。

redis7keeper的博客 597

Stream流

Stream流

qq_40658986的博客 510

Zabbix在Ubuntu 22.04上的性能优化与监控实战:从基础安装到高级配置

本文详细介绍了在Ubuntu 22.04系统上部署和优化Zabbix监控系统的完整流程,从基础安装到高级配置。内容包括MySQL数据库设置、Zabbix服务器与Web前端优化、性能调优策略以及实战监控场景应用,帮助用户构建高效的企业级监控解决方案。

sss66的博客 894

Stream 与集合、数组的运用

Stream 与集合、数组的操作运用

xwy1314的博客 2290

绿标短网址app.10086.cn/xxxxx移动短网址缩短接口网址api调用php方式解析

绿标短网址app.10086.cn/xxxxx 移动网缩短接口网址api调用php方式解析 app.10086.cn是移动网站的接口,可以制作移动网等第三方官方网站域名的任意生成接口,由于是认证企业,可以再抖音 微信 qq等第三方渠道正常打开不拦截提示,第三方网址,头条文章等,效果非常号,这里记录下api接口,纯技术php生成,具体规则可以去抖音的开放平台去申请对应接口 。这里用我php模拟抓包获取方式 GET http://www.app10086cn.cn/?i=app.10068.cnHTTP/1.1

qq_20300095的博客 5907

OpenCV透视变换实战:5分钟搞定歪斜证件照矫正(附完整代码)

本文详细介绍了如何使用OpenCV的透视变换技术快速矫正歪斜证件照,包含完整的Python代码实现。通过特征检测、坐标计算和矩阵变换三个核心步骤,5分钟内即可将手机拍摄的歪斜图像自动矫正为专业级证件照,大幅提升图像处理效率。

weixin_29094979的博客 481

java 8 stream操作

集合的stream操作 /** 主要接口 1,predicate 2,Unary/BinaryOperator:传入参数和返回值必然是同一种数据类型 3,Int/Double/LongFunction/BiFunction:函数接口并不要求传入参数和返回值之间的数据类型必须一样 4,Int/Long/DoubleConsumer/BiConsumer:消费数据 5,Int/...

linqi的博客 381

Python 爬取网页文字并保存为 txt 文件教程

将要爬取的网页网址赋值给变量url。

2403_89537385的博客 2789

java中访问数组元素的方法

总结:在 Java 中,可以使用增强的 for 循环、普通 for 循环、forEach() 方法以及将数组转换为 List 等方式来访问数组的每个元素。选择使用哪种方式取决于你的编码习惯和需求。3.使用 Arrays.asList() 方法(Java 5+):Arrays.asList() 方法可以将数组转换为 List,然后使用增强的 for 循环或 forEach() 方法来遍历。1.使用普通 for 循环:这是最常见的遍历数组的方法,使用传统的 for 循环语法,通过索引来访问数组中的每个元素。

qq_54245389的博客 3119

数控系统(CNC)系列:Fanuc 31i-B_(5).基本操作与编程

Fanuc 31i-B 系统使用 G 代码和 M 代码进行编程。G 代码主要用于控制机床的运动,M 代码用于控制辅助功能,如冷却液开关、主轴启动等。G 代码:用于指定机床的运动方式。例如,G00 用于快速定位,G01 用于直线插补,G02 用于顺时针圆弧插补,G03 用于逆时针圆弧插补。M 代码:用于控制机床的辅助功能。例如,M03 用于启动主轴顺时针旋转,M05 用于停止主轴,M08 用于开启冷却液,M09 用于关闭冷却液。

2401_87715305的博客 1766

通信算法之264: DJI O2 协议物理层逆向工程解析

对于 DroneID,标志之间的间隙由循环前缀 (CP) 填充:每个标志末尾的副本附加在相应标志的开头。有了关于确切标志开始的信息,可以使用 FFT 将标志转移到频域 - 来自时域的 1024 个样本导致频域中的 1024 个子载波。使用比特流的解扰和涡轮解码,并将生成的数据映射到如上的DroneID 结构,通过逆向工程在无人机的固件中找到了它。注意到一些无人机(Mavic 2 和更早的 OcuSync 无人机)不发送第一个标志(标志 1),这导致更短的帧持续时间为 576 µs。//产品型号数字代号。

leegang12的专栏 3942

JAVA8的新特性之-Stream()流的常用操作

JDK8的改动之一 ---- Stream流,可以用来批量操作数据!

7zwang的博客 1241

Mac安装Claude Code的3种方式及5类报错解决方案

介绍在Mac上安装Claude Code的3种实测可行方式(官方dmg、Homebrew+ARM原生构建、Docker容器化),并针对Gatekeeper签名验证失败、Rosetta 2内存对齐崩溃、Python ABI兼容性冲突等5类高频报错提供根因分析与可复现解决方案,覆盖M1–M3及Intel

weixin_28728443的博客 361

Java入门part8--String类01

String类 创建字符串的方式 方式1: 直接赋值 String str="abed";//直接赋值 方式2: String str2=new String("abce"); 这样会产生两个对象 不建议使用 方式3: char[] array={'a','b','c','d'}; String str3=new String(array); 字符串比较相等 表示地址比较 不是内容比...

仙女猴的博客 245

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JAVA 从入门到起飞 day8 面向对象01

面向:就相当于拿找对象:能干活的东西面向对象编程:拿东西过来做对应的事 让我们通过一个比喻来了解 JAVA 中的面向对象思想。想象一下你正在建一座房子:1. **类(Class)- 房子的蓝图** 在建造房子之前,你需要有一份详细的蓝图,指明了房子的结构和设计。在 JAVA 编程中,类就好比这样的一份蓝图,其中定义了对象的属性和方法(即对象可以做什么,有什么特点)。2. **对象(Object)- 根据蓝图建造的房子** 根据蓝图你可以建造多座结构相同但独立的房子。同理,在 JA

tang7mj的博客 202

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JAVA编程入门(01) JDK1.8下载安装配置

JAVA编程入门(01) JDK1.8下载安装配置

dengdeng8021223的博客 1077

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

学习笔记(01):Java8零基础入门视频教程-java开发IDE选择

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

qq_44896821的博客 128

Java 的备忘录 01 — 入门篇

这篇Java入门备忘录介绍了Java编程的基础知识,包括:1) 第一个Java程序的结构和运行方法;2) 变量和8种原始数据类型;3) 字符串操作和循环结构;4) 数组定义与使用;5) 变量交换和类型转换;6) 条件语句和用户输入获取。文章以博客《坐山听雨忆轮回》为案例,通过实际代码示例讲解了Java的基本语法和常见操作,适合初学者快速了解Java编程基础。

Echo_Rain的博客 5678

day01-Java入门

day01-Java入门

ZHUSHANGLIN的博客 1208

【Java8系列01】JDK8 的增强

(流)是一个来自数据源的元素队列并支持聚合操作:和以前的操作不同, Stream 操作还有两个基础的特征:和迭代器又不同的是, 可以并行化操作,迭代器只能命令式地、串行化操作。顾名思义,当使用串行方式去遍历时,每个 读完后再读下一个 item。而使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。 2.分析结论 通过字节码可以看到 invokedynamic 指令以某种方式负责创建 Predicate 实例。此方法以 字符串 作为输入,然后执行以下步骤:计算输入长

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 9511

java入门上部

Java是一门面向对象编程语言,不仅吸收了 C++语言的各种优点,还摒弃了 C++里难以理解的多继承、指针等概念,因此 Java语言具有功能强大和简单易用两个特征。Java语言>>>作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立性与可移植性、多线程、动态性等特点。Java可以编写桌面应用程、Web应用程序、分布式系统和嵌入式系统应用程序等。

m0_64500113的博客 1981

Day01Java入门

只有一步一个脚印,踏踏实实学习,才能从零基础到入门,再到精通。

qq_50642393的博客 1197

01-Java入门-JDK安装

是SUN(Stanford University Network,斯坦福大学网络)公司1995年推出的一门高级编程语言。由于Java很强大,现目前的一线大厂的服务器的代码几乎都离不开Java的身影,作为主要开发语言。正是因为现目前一线大厂使用Java的体量非常巨大,在未来相当长一段时间内,java是难以替代的。

美好开始来了 694

JAVA01_入门

Java基础入门 服务器端语言——没有快捷方式。——运行环境 以后书写的java代码——需要依赖jdk进行运行 Java介绍 java语言: 服务器端语言—— php python .net… 语言简单分类—— **二进制语言:**计算机最底下:硬件:识别的都是二进制语言。 01010101 01010101 0000001 0001100 – 8个字节分别代表什么含义 ,多个二进制组合又代表什么??????? **汇编语言:**大量的十六进制。 0xaf 0xaf 0xaf 0xaf

一个开发初学者的博客 778

vtk-8.01的java版本环境配置

vtk-8.01的java版本环境配置   0、当前环境: win10-64bit 电脑系统 java1.7-64bit   1、准备工具: 编译java版本的vtk后的文件:(64位版本) 1》dlls文件 2》vtk.jar文件 其中dlls文件夹下都是编译好的dll文件,如下图(总共有212个项目): 需要安装Visual Studio环境,我安装的是Visua...

sinat_23619409的博客 1530

Java从入门到精通 - Java入门

本文介绍了Java的快速入门,包含Java背景、搭建Java开发环境、IDEA开发工具的使用、Java基础语法

xian_x_的博客 3493
上一篇: 插入排序->希尔排序
下一篇: JDBC简单总结
dffxwe51549
博客等级 码龄12年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值