05_Arrays与Lambda

Java基础入门(十二)---集合遍历、Set接口、Map接口、常用工具类、Lambda表达式 本文介绍了Java集合框架中的集合遍历方法和Set接口使用。主要内容包括: 集合遍历: Iterator接口的使用方法及注意事项,包括并发修改异常的产生原因与解决方案 foreach循环的语法和特点,以及其无法修改集合元素的局限性 Set接口: HashSet的特性及基本用法,展示其对重复元素的自动过滤 通过案例演示HashSet存储字符串和自定义对象时的不同表现 关键点: 迭代器模式的设计思想 遍历集合时的并发修改问题处理 Set集合的无序性和去重机制 自定义对象在Set中存储时需重写hashCode() 阅读详情
Arrays
// Arrays:基本使用

import java.util.Arrays;
import java.util.function.IntToDoubleFunction;

public class Test {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30, 40, 50, 60};
        // 1. 返回数组的内容
        System.out.println(Arrays.toString(arr));  // [10, 20, 30, 40, 50, 60]

        // 2. 拷贝数组
        int[] arr2 = Arrays.copyOfRange(arr, 1, 4);
        System.out.println(Arrays.toString(arr2));  // [20, 30, 40]

        // 3. 拷贝数组,可以指定新数组的长度
        int[] arr3 = Arrays.copyOf(arr, 10);
        System.out.println(Arrays.toString(arr3));  // [10, 20, 30, 40, 50, 60, 0, 0, 0, 0]

        // 4. 把数组中的原数据改为新数组又存进去
        double[] prices = {99.8, 128, 100};
        // 把所有的价格都打八折,然后又存进去
        Arrays.setAll(prices, new IntToDoubleFunction() {
            @Override
            public double applyAsDouble(int value) {
                // value = 0 1 2 3...
                return prices[value] * 0.8;
            }
        });
        System.out.println(Arrays.toString(prices));  // [79.84, 102.4, 80.0]


        // 5. 对数组进行排序(默认是升序排序)
        Arrays.sort(prices);
        System.out.println(Arrays.toString(prices));
    }
}
// Arrays:为对象进行排序

import java.util.Arrays;
import java.util.Comparator;

public class Test {
    public static void main(String[] args) {
        // 准备一些对象
        Student[] arr = new Student[4];
        arr[0] = new Student("Jack", 20);
        arr[1] = new Student("Peter", 16);
        arr[2] = new Student("Tony", 24);
        arr[3] = new Student("Wang", 10);

        // 实现:按照对象的年龄属性,进行降序排序
        Arrays.sort(arr, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                // 约定1:认为左边对象 大于 右边对象,返回正整数
                // 约定2:认为左边对象 小于 右边对象,返回负整数
                // 约定3:认为左边对象 等于 右边对象,返回0

//                return o1.getAge() - o2.getAge();  // 升序排序
                return o2.getAge() - o1.getAge();  // 降序排序
            }
        });

        // 展示结果
        System.out.println(Arrays.toString(arr));
        // [Student{name='Tony', age=24}, Student{name='Jack', age=20}, Student{name='Peter', age=16}, Student{name='Wang', age=10}]

    }
}

class Student {
    private String name;
    private int age;

    Student() {

    }

    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", 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;
    }
}
Lambda

Lambda 表达式是 JDK 8 开始新增的一种语法格式;作用:用于简化匿名内部类的代码写法

  • 注意:Lambda 表达式只能简化函数式接口的匿名内部类
  • 什么是函数式接口:有且仅有一个抽象方法的接口
  • 将来我们见到的大部分函数式接口,上面都可能有一个@FunctionalInterface的注解,有该注解的接口就必定是函数式接口
public class Test {
    public static void main(String[] args) {
        // 传统写法
        Animal a = new Animal() {
            @Override
            public void run() {
                System.out.println("狗跑的快!");
            }
        };
        a.run();  // 狗跑的快!

        // 注意:Lambda 表达式只能简化"函数式接口"的匿名内部类
//        Swimming obj = new Swimming() {
//            @Override
//            public void swim() {
//                System.out.println("能游泳");
//            }
//        };
        Swimming obj = () -> {
            System.out.println("能游泳");
        };
        obj.swim();  // 能游泳
    }
}

interface Swimming {
    void swim();
}

abstract class Animal {
    public abstract void run();
}

Lambda 表达式的省略写法(进一步简化 Lambda 表达式的写法)

  • 参数类型可以省略不写
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略
  • 如果 Lambda 表达式中的方法体代码只有一行,可以省略大括号不写,同时也要省略分号!此时,如果这行代码是 return 语句,也必须去掉 return 不写
方法引用

JDK 8 新特性,其目的是为了进一步简化 Lambda 表达式

  • 静态方法的引用
// 伪代码:

// 第一部分
public class CompareByData{
    // 静态方法
    public static int compareByAge(Student o1, Student o2){
        return o1.getAge() - o2.getAge();
    }
}

// 第二部分 (以下的三行代码是等价的,只是形式不同)
Arrays.sort(arr, (o1, o2) -> o1.getAge() - o2.getAge());  // Lambda 表达式
    
Arrays.sort(arr, (o1, o2) -> CompareByData.compareByAge(o1, o2))  // 结合第一部分
    
Arrays.sort(arr, CompareByData::compareByAge);  // 静态方法引用(为了简化)

  • 实例方法的引用
// 伪代码:

// 第一部分
public class CompareByData{
    // 实例方法
    public int compareByAge(Student o1, Student o2){
        return o1.getAge() - o2.getAge();
    }
}

// 第二部分 (以下的三行代码是等价的,只是形式不同)
Arrays.sort(arr, (o1, o2) -> o1.getAge() - o2.getAge());  // Lambda 表达式
    
CompareByData compare = new CompareByData();  // 结合第一部分
Arrays.sort(arr, (o1, o2) -> compare.compareByAge(o1, o2));
    
Arrays.sort(arr, compare::compareByAge);  // 实例方法引用(为了简化)

  • 特定类型方法的引用
// 伪代码:

// 原始代码
Arrays.sort(arr, new Comparator<String>(){
    @Override
    public int compare(String o1, String o2){
        return 01.compareToIgnoreCase(o2);
    }
});

// 使用 Lambda 表达式————优化之后
Arrays.sort(arr, (o1, o2) -> o1.compareToIgnoreCase(o2));

// 使用特定类型方法引用
Arrays.sort(arr, String::compareToIgnoreCase);

  • 构造器引用
// 伪代码:

// 第一部分
public class Car{
    private String name;
    private double price;
    public Car(String name, double price){
        this.name = name;
        this.price = price;
    }
    ...
}

// 第二部分

// 原始代码
CreateCar cc = new CreateCar(){
    @Override
    public Car create(String name, double price){
        return new Car(name, price);
    }
};
cc.create("奔驰","58.8");

// 使用 Lambda 表达式进行化简
CreateCar cc = (name, price) -> new Car(name, price);

// 构造器引用
CreateCar cc = Car::new;

【深度学习】手把手教你在远程服务器上跑 YOLOv3 相关代码(含环境配置) 这篇文章主要记录了如何配置项目环境以及如何在远程服务器上跑 YOLOv3 模型。 阅读详情

相关推荐

单细胞分析(五)——使用Harmony进行数据整合和去批次

为了保证单细胞RNA测序数据的准确性和可靠性,需要对数据进行样本去批次处理。去批次的方法包括Harmony,SeuratV3等,这些方法可以有效地消除批次效应和技术噪声,并提高单细胞RNA测序数据的质量,为后续的数据分析提供更加可靠的基础。

阅读文献,记录学习笔记 3万+

day05 arrays操作,lambda,方法引用,算法,二分查找

1.使用Arrays类操作可以对数组很方便的进行操作,这里也是为了lambda做一点铺垫。若target<mid,right是移到mid-1的位置。5.二分查找注意保持循环条件。这是一种减少代码量(

m0_65018431的博客 286

Go语言集成Ollama本地大模型:gollama库实战指南

在当今的AI应用开发中,大型语言模型(LLM)的集成已成为关键技术。其核心原理是通过API调用,将自然语言处理能力嵌入到各类应用中。从技术价值看,本地化部署的LLM解决了数据隐私、网络延迟和持续成本三大痛点,尤其适合处理敏感数据或对实时性要求高的场景。在工程实践中,开发者常使用专门的客户端库来简化与模型服务的交互,例如通过封装REST API、提供类型安全接口和流式处理支持,从而提升开发效率和代码健壮性。具体到Go语言生态,结合Ollama这一流行的本地大模型运行工具,可以实现完全离线、低延迟的AI功能集成

weixin_28728443的博客 604

day05-Arrays-Lambda-算法-正则表达式【JAVA】

java学习day05

uhb1223的博客 161

STM32F407-OV7670(无FIFO)-ONENET-实现摄像头画面上传到onenet(EDP协议)

EDP协议 EDP协议文档说明:https://leoeinstein.lanzous.com/ifX1Ckfkaaf 服务器登录 登录流程: (1)客户端发送连接请求(CONN_REQ) (2)服务器验证请求的合法性 (3)服务器发送一个回执(CONN_RESP)给客户端 其中请求包含三部分:消息头、选项和消息体。 1、消息头 包括消息的类型和剩余消息长度。 2、选项 包括协议名称、协议版本、连接标志、保持连接时间。 3、消息体 可能包含设备ID、用户ID(可选)、鉴权信息(看采取什么方式登录)。 设备

LiangWF22的博客 1万+

Hyper-V创建Ubuntu虚拟机设置固定IP

本文记录使用hyper-v创建ubuntu虚拟机,为虚拟设置固定IP且通过物理机可访问。

2622

05 - DateTimeFormatter Arrays Lambda 冒泡排序 选择排序 二分查找

DateTimeFormatter Arrays Lambda 冒泡排序 选择排序 二分查找

m0_73324205的博客 202

Landsat9 地表温度反演方法

landsat9地表温度反演及缺失值处理方法

xiangliu12345的博客 3916

Lambda和Arrays工具类的排序用法

Arrays.sort(arr)是只能对基本数据类型进行排序的,而且默认升序,想要降序,先要把基本数据类型转换为引用数据类型,再重写compare方法。对于String ,可以用return o1.length()-o2.length;有且仅有一个抽象方法,接口上方可以加@Functionallnterface注解。arr只能比较引用数据类型,如果是基本数据类型需要转换为引用数据类型。Lambda表达式只能简化函数式接口的匿名内部类的写法;Lambda表达式可以用来简化匿名内部类的书写;

canmakeit的博客 335

STM32_WS2811驱动

STM32的WS2811驱动

健身房 2840

QuecOpen RTOS学习笔记

对计算机响应时间有要求的系统,通常称为临界系统或应用。为了满足临界系统或应用对计算机响应 时间的要求,人们开发了实时操作系统(Real Time Operation System)。 实时操作系统指所有任务均在规定时间内完成的操作系统,同时任务完成必须满足时序可预测性。需 要注意的是,实时操作系统的本质是其反应具有时序可预测性。得益于此,实时操作系统通常反应非常快。 实时操作系统的内核对象一般包括任务、信号量、互斥锁、消息队列、定时器、事件通知和软件看门 狗等。

zxm8513优快云博客 2030

day05-Lambda、方法引用、算法、正则表达式

接下来我们学习的类叫做Arrays,其实Arrays并不是重点,但是我们通过Arrays这个类的学习有助于我们理解下一个知识点Lambda的学习。所以我们这里先学习Arrays,再通过Arrays来学习Lamdba这样学习会更丝滑一些。

weixin_70414390的博客 210

模型预测控制 (MPC, Model Predictive Control) 算法详解及案例分析

模型预测控制是一种基于模型的控制策略,通过在线求解一个有限时域的优化问题,预测系统的未来行为,并根据预测结果调整控制输入,以实现系统的稳定性和性能优化。

闲人编程的博客 2934

day05-常见API,Lambda,算法

day05-常见API,Lambda,算法

GemstonePhos的博客 193

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

day05-常用API(二):Lambda、方法引用详解

java里面带有s的基本上是工具类之前toString是要重写,现在不用重写是因为别人已经帮我门封装好了:拷贝:扩容:修改数组数据再存入:数组排序:重写Comparable:自带比较器:

2301_80678122的博客 197

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Lambda练习二:有参有返回值

需求: 使用数组存储多个Person对象 对数组中的Person对象使用Arrays的方法sort方法通过年龄进行升序排序 代码: package demo05.Lambda; import java.util.Arrays; import java.util.Comparator; public class Demo01Arrays { public static void main(String[] args) { //使用数组存储多个Person对象 Pers

weixin_44664432的博客 313

数学建模模型总结

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

15-Lambda表达式

面向对象的思想:做一件事情,找个能解决这个事情的对象,调用对象的方法,完成任务。 函数式编程思想:只要能获得结果,谁去做、怎么做都不重要,重要的是结果。 jdk1.8发布了Lambda表达式。 ##体验Lambda的更优写法 借助Java 8的全新语法,通过Runnable接口的匿名内部类写法可以通过更简单的Lambda表达式达到等效: public class Demo02LambdaRunna...

燃烧的键盘的笔记 188

JavaSE(Java标准版)-05

java基础知识

weixin_52583817的博客 254

list、数组、使用lambda+comparator实现排序

list、数组使用Comparator(比较器,一般jdk内部的类有比较的都实现了此接口,比如Long、Integer、List等)排序 使用例子如下: package lambda; import com.google.common.collect.Lists; import java.util.*; /** * @author yin * @date 2019/05/2...

weixin_42327945的博客 1053

java8 lambda表达式究竟需要怎么用

Java8发布已经有一段时间了,这次发布的改动比较大,很多人将这次改动与Java5的升级相提并论。Java8其中一个很重要的新特性就是lambda表达式,允许我们将行为传到函数中。想想看,在Java8 之前我们想要将行为传入函数,仅有的选择就是匿名内部类。Java8发布以后,lambda表达式将大量替代匿名内部类的使用,简化代码的同时,更突出了原来匿名内部类中最重要的那部分包含真正逻辑的代码。...

face light~ 7321

Java学习笔记===》12.常见算法和Lambda表达式

相邻的元素两两比较,小的放前面,大的放后面。

m0_59318477的博客 205

java基础进阶学习笔记Day05(黑马磊哥课程)

如果是自定义的类Student,直接使用会报错:class com.itheima.Student cannot be cast to class java.lang.Comparable。因为sort方法不知道按照什么规则进行比较~~~~自定义排序规则方式一:实现Comparable接口,重写compareTopublic class Student implements Comparable<Student> {//泛型要填的是:需要和谁比int age;//指定大小规则。

wangwangxiaohai的博客 426

【免费Java系列】大家好 ,今天是学习面向对象高级的第五天点赞收藏关注,持续更新作品 !

接下来我们学习的类叫做Arrays,其实Arrays并不是重点,但是我们通过Arrays这个类的学习有助于我们理解下一个知识点Lambda的学习。所以我们这里先学习Arrays,再通过Arrays来学习Lamdba这样学习会更丝滑一些^_^.

2401_83885533的博客 806

蓝桥杯Java排序进阶:Comparator与Comparable接口的3种实战写法与选择策略

本文深入解析蓝桥杯Java编程竞赛中的排序技巧,重点介绍Comparator与Comparable接口的3种实战写法(匿名内部类、Lambda表达式、方法引用)及其选择策略。通过对比分析不同实现方式的性能与适用场景,帮助开发者掌握高效、优雅的排序代码编写方法,提升竞赛编程效率。

weixin_38166557的博客 359

解题思考:为什么Java中使用Arrays.stream()创建流处理数组通常会增加开销,提高时间复杂度?

在流中,编译器不能像对待简单的 for 循环那样进行某些特定的优化,例如循环展开(loop unrolling)或向量化(vectorization)。因此,对于一些简单的操作,手动实现的循环可能会比流更高效。虽然这种惰性求值机制可以带来某些情况下的性能优化,但它也意味着流的处理过程中可能需要进行多次遍历,增加了开销。总的来说,尽管流提供了一种优雅、简洁的方式来处理集合,但在性能敏感的场合下,尤其是处理简单的数组操作时,传统的循环可能会更高效。时,使用传统遍历会比创建流处理数组的时间复杂度更低。

jungleirim的博客 622

《2021-05-18》java1.8新特性

java1.8新特性 1. java8新特性 1. Lambda 表达式 Lambda 表达式,也称为闭包,允许把函数作为一个方法的参数,使用Lambda 表达式可以使代码变的更加简洁紧凑。 1.1 语法 lambda 表达式的语法格式如下: (parameters) -> expression或(parameters) ->{statements; } 以下是lambda表达式的重要特征: 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。 可选的参数圆括号:一个参数无需定义圆

guoxiaozhong的博客 253
上一篇: 04_使用API_日期和时间
下一篇: 06_正则与异常处理
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值