Lambda、Stream与新增内容

Paraview:Python Calculator Filter python calculator过滤器 from paraview.simple import * connection = servermanager.Connect('localhost',11111) er = servermanager.sources.EnSightreader(CaseFileName='/.../data.case') er.PointArrays = ['x_velocity','1','y_velocity','1','z_velocity','1','cp','1'] 阅读详情

Lambda、Stream与新增内容

1.interface新增内容

JDK1.8新增 :

​ 1)静态方法 : 跟随接口名使用

​ 2)默认方法 : 显示 通过default修饰的方法

​ 可以在实现类中重写

​ 需要通过实现类对象调用

JDK9新增 :

​ 私有方法 : 被private关键字修饰
​ 不能在外部类中使用
​ 只能在接口中的默认方法中调用

public class Class001_Interface {
    public static void main(String[] args) {
        Smoke.testStatic();
        new Impl().testDefault();
    }
}
interface Smoke{
    void smoking();
    //静态方法
    public static void testStatic(){
        System.out.println("接口中的静态方法");
    }
    //默认方法
    default void testDefault(){
        System.out.println("默认方法....");
        testPrivate();
    }
    //私有方法
    private void testPrivate(){
        System.out.println("私有方法...");
    }
}
class Impl implements Smoke{
    @Override
    public void smoking() {
    }
    @Override
    public void testDefault() {
        System.out.println("重写的默认方法....");
    }
}

2.Lambda

例题一

调用Collections.sort()方法对List集合中的数据做默认升序排序,通过定值排序比较两个Employee(先按年龄比,年龄相同按姓名比),使用Lambda作为参数传递
分析:

1.定制排序:指自定义比较器|定制排序

​ 自然排序:内部比较器|自然排序

2.先比较年龄,年龄相同才比较姓名

Lambda表达式 : 将行为作为参数传递–>函数式编程

如果形参|引用为函数式接口类型,实参|赋值就可以为Lambda表达式

public static void main(String[] args) {
		List<Employee> emps = Arrays.asList(
				new Employee(103,"迪丽热巴",30,8888),
				new Employee(101,"古力娜扎",28,7777),
				new Employee(102,"易烊千玺",23,8888),
				new Employee(104,"欧娜娜娜",28,7777)
		);
		//Collections.sort(emps);  检测Employee类型是否实现了内部比较器,如果是调用做升序排序,如果没有实现报错
		System.out.println(emps);
		//Collections.sort(emps,(x,y)->x.getId()-y.getId());  //根据员工编号做升序排序
		Collections.sort(emps,(x,y)->{
			if(x.getAge()==y.getAge()){
				return y.getName().compareTo(x.getName());
			}
			return Integer.compare(x.getAge(),y.getAge());
		});  //根据员工编号做升序排序
		System.out.println(emps);
	}
例题二

1)声明函数式接口,接口中声明抽象方法,public String getValue(String str)

2)声明类 TestLambda,类中编写方法使用接口作为参数,讲一个字符串转成大写,并作为方法的返回值

3)再将一个字符串的第2个和第4个索引位置进行截取子串

public class Class002_TestLambda {
	public static void main(String[] args) {
		System.out.println(strHandler("abc",s->s.toUpperCase()));;
		System.out.println(strHandler("123abc456",s->s.substring(2,5)));;
	}
	//需求 : 对任意一个字符串做某种操作,返回结果
	public static String strHandler(String str,MyFunction my){
		return my.getValue(str);
	}
}
//接口
@FunctionalInterface
interface MyFunction{
	public String getValue(String str);
}
习题三

1)声明一个带两个泛型的函数式接口,发型类型为<T,R> T为参数,R为返回值

2)接口中声明对应抽象方法

3)在TestLambda类中声明方法,参数三个,两个long类型的参数,接口作为参数,接口实现中计算两个long型参数的和

4)再计算两个long型参数的乘积

public class Class003_TestLambda {
	public static void main(String[] args) {
		pera(100L,200L,(x,y)->x+y);
		pera(100L,200L,(x,y)->x*y);
	}

	//对两个long类型数据的使用 ,输出结果
	public static void pera(long l1,long l2,MyFunction2<Long,Long> my){
		System.out.println(my.test(l1,l2));
	}
}

@FunctionalInterface
interface MyFunction2<T,R>{
	public R test(T t1,T t2);
}

3.函数式接口

java.util.function下的函数式接口

四大内置函数式接口

​ 1.消费型接口:有参无返回值

​ Consumer

​ void accept(T t)

​ 2.函数式接口:有参有反回值

​ Function<T,R>

​ R apply(T t)

​ 3.段言型接口:有参返回布尔

​ Predicate

​ boolean test(T t)

​ 4.供给型接口:无参有返回值

​ Supplier

​ T get()

 public static void main(String[] args) {
        happy(5000,m-> System.out.println("为PDD刷火箭消费"+m));
        System.out.println(strHandler("DLGJGL",s->s.toLowerCase()));
        System.out.println(test(10,()->(int)(Math.random()*(8-5+1)+5)));
        Consumer c = a -> System.out.println("ss");
        c.accept(10);
        Function d = b-> b;
    }
    //消费
    public static void happy(double money, Consumer<Double> con){
        con.accept(money);
    }
    //对任意一个 字符串进行某种操作返回结果
    public static String strHandler(String str, Function<String,String> fun){
        return fun.apply(str);
    }
    //生成指定个数的指定规则的随机整数
    public static List<Integer> test(int num, Supplier<Integer> sup){
        List<Integer> list = new ArrayList<>();
        for(int i=1;i<=num;i++){
            list.add(sup.get());
        }
        return list;
    }
方法引用

是用来简化Lambda表达式的,是Lambda表达式的另外一种表现形式。

简化条件要求 : 必须满足一下2个条件

​ 1.当lambda体{}中的实现就是通过调用另外一个方法实现的,可以考虑是否可以通过方法引用简化

​ 2. a)当lambda参数列表,返回值与内部引用方法的参数列表与返回值保持一致的时候 ----> 对象::成员方法 | 类名::静态方法

​ b)内部所引用方法的 返回值与lambda表达式的返回值一致,lambda参数列表的第一个参数作为调用内部方法的对象,lambda参数列表的第二个参数开始匹配内部引用方法参数列表 ----> 类名::成员方法

方法引用语法 ::

​ 对象::成员方法

//分析 : 1. 满足   println()        2)  a)满足   ===>对象::成员方法
        list.forEach(i->{
            System.out.println(i);
        });
        //变化后
        list.forEach(System.out::println);

​ 类名::静态方法

//求两个double中的最大值
        //BiFunction<Double,Double,Double> fun = (x,y)->Math.max(x,y);
        //分析  : 1. 满足  max()  2.a)满足 ===>类名::静态方法
        BiFunction<Double,Double,Double> fun = Math::max;

​ 类名::成员方法

//比较两个字符串是否相等
        //BiPredicate<String,String> bi = (x,y)->x.equals(y);
        //分析  : 1. 满足  equals  2. b) 类名::成员方法
        BiPredicate<String,String> bi = String::equals;

Stream流

1.三者之间的差别

IO流 : 关注数据的传输

集合|数组 : 关注数据的存储

Stream流 : 关注数据的运算

将由数据源产生的元素序列进行流式运算

2.Stream流的使用步骤

​ 1.获取创建Stream流

​ 2.一些列流式中间操作

​ 3.终止行为

3.Stream流的特点

​ 1.Stream本身不存储数据

​ 2.Stream的运算不影响数据源

​ 3.所有中间操作都返回持有结果的新的流

​ 4.流是一次性的流,一旦已经使用就被破坏,无法重复使用多次

​ 5.延迟执行|惰性加载 : 当获取终止行为的时候所有的中间操作才会执行

4.获取Stream的方式

​ 1.Collection–>stream()

        List<Integer> ls = List.of(1,2,3,4,5);
        Stream<Integer> s1 = ls.stream();
        s1.forEach(System.out::println);

​ 2.Arrays.stream()

        String[] arr = {"aaa","bbb","ccc","ddd"};
        Stream<String> s2 = Arrays.stream(arr);
        s2.forEach(System.out::println);

​ 3.Stream.of(…)

		Stream<Integer> s3 = Stream.of(5,4,3,2,1);
        s3.forEach(System.out::println);
5.Stream中间操作 :

​ 1.过滤 filter(Predicate<? super T> predicate) 返回由与给定谓词匹配的此流的元素组成的流。

​ 2.截取 Stream limit(long maxSize) 返回由该流的元素组成的流,长度被截断为不超过maxSize 。

​ 3.跳过 Stream skip(long n) 在丢弃流的前n元素后,返回由该流的剩余元素组成的流。

​ 4.去重 Stream distinct() 返回由该流的不同元素(根据Object.equals(Object) )组成的流。

​ 根据equals与hashCode方法,需要根据内容重写

​ 5.排序

​ Stream sorted() 返回由该流的元素组成的流,按自然顺序排序。

​ Stream sorted(Comparator<? super T> comparator) 返回由该流的元素组成的流,根据提供的Comparator排序。

 emps.stream()
               .filter(e->e.getAge()<30)
               //.limit(4)
               //.skip(1)
               .distinct()
               .sorted((x,y)->Integer.compare(x.getAge(),y.getAge()))
               .forEach(System.out::println);

OpenWebUI外部模型配置异常排查与修复指南 本文详细解析了OpenWebUI外部模型配置异常的常见问题及解决方案,包括隐藏字符、数据库锁死等典型现象。通过错误日志分析和数据库修复实战指南,帮助开发者快速定位并解决配置问题,确保OpenWebUI与第三方大模型的稳定连接。 阅读详情

相关推荐

ECU-TEST 快速入门

ECU-TEST 是由位于德国德累斯顿的TraceTronic公司开发的一款用于嵌入式系统测试验证软件工具。自从2003年首次发布ECU-TEST ,该软件成为了汽车ECU开发的标准工具 ,同时也逐步成为了重型机械和工业自动化开发的标准工具 。该软件是起源自于一个控制单元的系统化测试的项目研究,从而为从德累斯顿工业大学脱离出来的TraceTronic公司奠定了基础。ECU-TEST旨在完成测试案例的规范化、评估、求解和归档。得益于该软件包含大量的自动化测试方法使得测试案例的所有必要功能如创建、求解和评估

wangying202的博客 1万+

Java8 中新增的 Stream 流操作

因为Stream主要用于对集合数据的处理场景,所以除了上面几种获取简单结果的终止方法之外,更多的场景是获取一个集合类的结果对象,比如List、Set或者HashMap等。并行流类似于多线程在并行处理,所以与多线程场景相关的一些问题同样会存在,比如死锁等问题,所以在并行流终止执行的函数逻辑,必须要保证线程安全。顾名思义,通过终止管道操作之后,Stream流将会结束,最后可能会执行某些逻辑处理,或者是按照要求返回某些执行后的结果数据。...

一线大码 1235

deepfake detection数据集

最全Deepfake数据集总结,包含各个数据集下载链接: https://github.com/deepfakeinthewild/deepfake_in_the_wild Dataset name Download Generate method Deepfake videos Actors Deepfake-TIMIT low download De...

where_is_horse的博客 1万+

JavaStream流的使用

Stream流

qq_50477101的博客 1139

spoon工具的常用基础操作

先创建一个作业,这个作业流程,包括进行设置变量转换,查询结果输出转换,方便后续循环。整个流程写完后,执行作业5_执行整个流程,成功后,可以在数据库查看结果。,新建一个转换,excel表输入然后复制记录到结果,保存转换文件。这三个用户下 都有一张emp表 分别是 三个部门的用户信息。,新建一个数据库连接,变量命名用户名和密码。成功执行后,可以到保存的excel位置进行查看。emp表输入,可以进行预览查看数据有没有过来。输出到一直excel表,运行结果输出。,新建一个转换,拖拽。

qq_43583887的博客 5831

利用Python脚本生成IDA Pro许可证文件idapro.hexlic的完整指南

本文提供了一份详细的Python脚本指南,用于自动化生成IDA Pro的许可证文件idapro.hexlic。文章深入解析了脚本原理,包括构建许可证JSON、RSA密钥修补与签名生成机制,并附有完整的操作流程与常见问题排查,帮助逆向工程人员快速完成本地化许可部署。

weixin_29313547的博客 613

Java--Stream(流)--使用/实例/流操作

Stream(流操作) 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。 也可以使用 Stream API 来并行执行操作。

IT利刃出鞘的博客 1万+

180.在 Vue3 中使用 OpenLayers 实现多个多边形的绘制、编辑、删除与清空

【摘要】本文介绍如何在Vue3+TypeScript环境下使用OpenLayers实现多边形地图交互功能。通过Composition API封装核心逻辑,实现了多边形绘制、编辑、删除及清空等操作。关键技术包括:使用VectorLayer管理图形数据,Draw/Modify/Select交互控制,以及通过ref()管理交互状态。文中提供了完整代码示例,并解决了交互对象叠加问题,为开发GIS应用提供了基础模块。该方案支持扩展为数据库存储、后端交互等高级功能。

小彭的博客 770

MybatisPlus中IService的Lambda使用和批量新增

案例需求:实现一个根据复杂条件查询用户的接口,查询条件如下:name:用户名关键字,可以为空;status:用户状态,可以为空;minBalance:最小余额,可以为空;maxBalance:最大余额,可以为空。

lxr_playup的博客 1157

【乐企文件生成工程】关于乐企文件生成工程的详细介绍

发票文件生成方式有两种思路:1、根据已有的OFD模板,动态替换ofd模板内容;之后将ofd转pdf(局限:单行问题不大)详情可以在此处了解2、根据html模板动态占位:该工程就是这种方式 ,目前效果良好,可看下图。拿去即用的源码!无任何保留,当然也并不是所有票种都支持(时间有限、精力有限、已经连着转了,要冒烟了…)

九七的博客 2031

第9章:Embedding、Pooling 与检索增强基础

本文介绍了律师事务所如何利用vLLM构建法律文档RAG系统,解决传统关键词检索在语义匹配上的不足。主要内容包括: 项目背景:传统Elasticsearch检索在法律术语上的低准确率问题,及多模型维护的复杂性; 技术方案:采用vLLM统一支持生成和向量化能力,通过语义向量检索提升相关性; 关键实现: 用vLLM的Embedding端点处理文档向量化 构建包含离线索引和在线检索的完整RAG流程 采用余弦相似度进行语义匹配 实践建议:切片大小选择、向量归一化处理、不同场景下的数据库选型等。

davidwang456的专栏 60

MyBatisPlus详解(三)lambdaQuery、lambdaUpdate、批量新增、代码生成、Db静态工具、逻辑删除

MyBatisPlus详解(一)项目搭建、@TableName、@TableId、@TableField注解与常见配置MyBatisPlus详解(二)条件构造器Wrapper、自定义SQL、Service接口。

挑灯日记 记录自己 1万+

DA14531之搭建开发环境

DA14531之搭建开发环境

hejinwu1314的博客 1779

Java基础-Stream

Java基础-Stream:什么是Stream?、工作流程、获取Stream流、Stream流常见的中间方法、Stream流常见的终结方法

MMF博客园 993

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java函数式编程api_Java 函数式编程(Lambda表达式)与Stream API

1 函数式编程函数式编程(Functional Programming)是编程范式的一种。最常见的编程范式是命令式编程(Impera Programming),比如面向过程、面向对象编程都属于命令式编程,大家用得最多、最熟悉。函数式编程并非近几年的新技术或新思维,其诞生已有50多年时间。在函数式编程里面,一切都是数学函数。当然,函数式编程语言里也可以有对象,但这些对象是不可变的——要么是函数参数要...

weixin_39634579的博客 283

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JSR 335 Lambda Expressions学习系列

JSR 335: Lambda Expressions for the JavaTM Programming Language 主要分为3篇来学习 Java里面的functional interface Java里面Lambda表达式 Java里面的Stream JSR 335提供的API包括新类和现有类的添加。 新增加的包 java.util.function 包包含通用功能接口,这些接口为lambda表达式和方法引用提供目标类型。 java.util.stream 包含Streams功能的大多数接

chadm.xiang 270

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java 8 相对于 Java 7 的新增特性笔记

Java 8是2014年发布的革命性版本,引入了多项重要特性:1)Lambda表达式简化函数式编程;2)函数式接口与方法引用;3)Stream API支持集合函数式操作;4)接口默认方法;5)Optional类避免空指针;6)新日期时间API;7)重复注解与类型注解;8)Nashorn JavaScript引擎;9)并发与集合类优化。这些改进使Java更现代化,提升开发效率与代码可读性。

笑衬人心的博客 449

JAVA8之lambda表达式详解,及stream中的lambda使用

1.什么是lambda表达式? 2.lambda表达式用来干什么的? 3.lambda表达式的优缺点? 4.lambda表达式的使用场景? 5.lambda只是有个语法糖吗? 6.stream和lambda的关系 7.stream的作用 8.stream的使用

凤歌 5万+

【Java】Lambda与Stream API

本文介绍了Java 8引入的Lambda表达式和Stream API的核心概念与使用方法。主要内容包括:Lambda表达式的基本语法与使用场景,函数式接口的定义与内置接口(Consumer、Supplier、Function、Predicate等),方法引用的三种类型(静态方法、实例方法、构造方法引用),以及Stream API的基础操作和常用流式处理(过滤、映射、归约等)。文章通过大量代码示例演示了如何利用这些特性简化代码,提高开发效率,适合Java开发者学习函数式编程的基础知识。

小昭的博客 1276

Lambda表达式与Stream流

目录 一.什么是Lambda表达式 二.语法格式 三.Lambda表达式使用 1.从匿名类到Lambda的转化 2.匿名内部类作为参数传递 3.函数式接口 4.作为参数传递Lambda表达式 5.方法引用 6.构造器引用 7.数组引用 四.Stream流 1.什么是Stream流 2.Stream流特点 3.操作步骤 4.创建流的例子 5.Stream流的中间操作 ...

wys5的博客 3036

Lambda 表达式 与 Stream流

Lambda Lambda 表达式是一个匿名函数,我们可以把 lambda 表达式理解为一段可以传递的代码(将代码段像数据一样传递)。使用它可以写出更简洁, 更灵活的代码。作为一种更紧凑的代码风格,使 java 语言的表达式能力得到的提升。 我们可以知道, Lambda表达式是为简化语法而存在的 ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b");...

xx12321q的博客 2016

Java中Lambda Stream详解

本文详细介绍了Java中Lambda表达式和Stream API的核心概念与应用。Lambda是Java 8引入的匿名函数,用于简化函数式接口的实现,其基本语法为(参数)->表达式。Stream是对集合进行声明式处理的API,包含创建、中间操作和终止操作三个阶段。文章通过代码示例展示了filter、map、sorted、reduce等常见Stream操作,并总结了Stream的惰性求值、不可变性和并行处理三大特性。最后提供了最佳实践建议,如避免过度链式操作、优先使用方法引用等,帮助开发者更高效地使用L

记录学习编程的日常 1267

JDK1.8新增的Stream的使用及原理

可以说函数式编程,Lambda 和 Stream 是JDK1.8新增的最有亮点的特性了。在学习Apache Flink 的时候,经常遇到算子运算,其实这就是一种最常用的Stream流编程运算,今天就来研究一下Java 的JDK1.8提供的Stream流式编程,以便对后续学习Flink和Spark还有Strom这些流式和批式处理框架有所帮助。 新的java.util.stream包...

leehsiao的专栏 1万+

Lambda表达式与Stream API

Java8最具革命性的两个新特性是Lambda表达式和Stream API,它们都是基于函数式编程的思想,函数式编程给Java注入了新鲜的活力。

冲出仁川,走出马德里,故事还会再继续 3223

Lambda和Stream流

Stream 是JDK1.8 中处理集合的关键抽象概念,Lambda 和 Stream 是JDK1.8新增的函数式编程最有亮点的特性了,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。当创建流的时候,数组类型是基本数据类型的时候,需要用到boxed(),把流中的数据变成引用数据类型(装箱)创建无限流,流中的元素无限多个,所以要配合limit使用。orElse(值) 是前两个方法的组合,如果容器中有数据,就返回容器中的数据,没有的话,使用括号中的值。要求两个方法的参数要一致。

weixin_65700815的博客 1116

Java 8常用新特性Lambda表达式与Stream API使用实例

Java8 新增了很多特性,本文主要介绍使用: Lambda 表达式 − Lambda允许把函数作为一个方法的参数。 Stream API −新添加的Stream API(java.util.stream) 函数式编程风格的引入。 更多的新特性可以参阅官网:What’s New in JDK 8 前置准备 创建一个测试类 /** * @author 码农猿 */ public class ...

程序员小强的博客 6824
上一篇: Java集合一
下一篇: Java中的多线程
地球魔
博客等级 码龄6年 317粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值