day17 Stream流和方法引用

VMware 虚拟机里连不上网的五种解决方案 在VMware虚拟机里的虚拟机系统连接不上网络 首先,注意查看适配器选项里的网络连接这两个网络连接是否存在,如果不存在可以重新装一下VM 如果存在,连不上网 解决办法一: 虚拟机设置里,找到“网络适配器”,右边的网络连接选择“NAT 模式”,如果不行的话再linux系统。还是不行的话接着看第二种解决方案。 解决方法二: 可能原因是VMware NET Service... 阅读详情

Stream流

流过滤的方法

Stream流中的常用方法_filter:用于对Stream流中的数据进行过滤

  • Stream filter(Predicate<? super T> predicate);
    filter方法的参数Predicate是一个函数式接口,所以可以传递Lambda表达式,对数据进行过滤

Predicate中的抽象方法:

  • boolean test(T t);
    使用Stream流的方式,遍历集合,对集合中的数据进行过滤
    Stream流是JDK1.8之后出现的
    关注的是做什么,而不是怎么做
public class Demo02Stream {
    public static void main(String[] args) {
        //创建一个List集合,存储姓名
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");

        //对list集合中的元素进行过滤,只要以张开头的元素,存储到一个新的集合中
        //对listA集合进行过滤,只要姓名长度为3的人,存储到一个新集合中
        //遍历listB集合
        list.stream()
                .filter(name->name.startsWith("张"))
            .filter(name->name.length()==3)
            .forEach(name-> System.out.println(name));
	}
}

获取流的方法

java.util.stream.Stream是Java 8新加入的最常用的流接口。(这并不是一个函数式接口。)
获取一个流非常简单,有以下几种常用的方式:

  • default Stream stream​()
    所有的Collection集合都可以通过stream默认方法获取流;
  • static Stream of​(T… values)
    Stream接口的静态方法of可以获取数组对应的流。
    参数是一个可变参数,那么我们就可以传递一个数组

遍历流的方法

Stream流中的常用方法_forEach

  • void forEach(Consumer<? super T> action);
    该方法接收一个Consumer接口函数,会将每一个流元素交给该函数进行处理。
    Consumer接口是一个消费型的函数式接口,可以传递Lambda表达式,消费数据

简单记:
forEach方法,用来遍历流中的数据
是一个终结方法,遍历之后就不能继续调用Stream流中的其他方法

流中类型转换的方法

Stream流中的常用方法_map:用于类型转换
如果需要将流中的元素映射到另一个流中,可以使用map方法.

  • Stream map(Function<? super T, ? extends R> mapper);

该接口需要一个Function函数式接口参数,可以将当前流中的T类型数据转换为另一种R类型的流。

Function中的抽象方法:

  • R apply(T t);

流中统计元素个数的方法

Stream流中的常用方法_count:用于统计Stream流中元素的个数

  • long count();
    count方法是一个终结方法,返回值是一个long类型的整数
    所以不能再继续调用Stream流中的其他方法了

流中截取元素的方法

Stream流中的常用方法_limit:用于截取流中的元素
limit方法可以对流进行截取,只取用前n个。方法签名:

  • Stream limit(long maxSize);
    参数是一个long型,如果集合当前长度大于参数则进行截取;否则不进行操作

注意:
limit方法是一个延迟方法,只是对流中的元素进行截取,返回的是一个新的流,所以可以继续调用Stream流中的其他方法

流中跳过元素的方法

Stream流中的常用方法_skip:用于跳过元素
如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流:

  • Stream skip(long n);
    如果流的当前长度大于n,则跳过前n个;否则将会得到一个长度为0的空流。

组合流的静态方法

Stream流中的常用方法_concat:用于把流组合到一起
如果有两个流,希望合并成为一个流,那么可以使用Stream接口的静态方法concat

  • static Stream concat(Stream<? extends T> a, Stream<? extends T> b)

方法引用

对象名引用成员方法

通过对象名引用成员方法
使用前提是对象名是已经存在的,成员方法也是已经存在
就可以使用对象名来引用成员方法

定义一个函数式接口

@FunctionalInterface
public interface Printable {
    //定义字符串的抽象方法
    void print(String s);
}

定义一个成员方法,传递字符串,把字符串按照大写输出

public class MethodRerObject {
    //定义一个成员方法,传递字符串,把字符串按照大写输出
    public void printUpperCaseString(String str){
        System.out.println(str.toUpperCase());
    }
}

定义一个测试类

public class Demo01ObjectMethodReference {
    //定义一个方法,方法的参数传递Printable接口
    public static void printString(Printable p){
        p.print("Hello");
    }

    public static void main(String[] args) {
        //调用printString方法,方法的参数Printable是一个函数式接口,所以可以传递Lambda表达式
        printString((s)->{
            //创建MethodRerObject对象
            MethodRerObject obj = new MethodRerObject();
            //调用MethodRerObject对象中的成员方法printUpperCaseString,把字符串按照大写输出
            obj.printUpperCaseString(s);
        });

        /*
            使用方法引用优化Lambda
            对象是已经存在的MethodRerObject
            成员方法也是已经存在的printUpperCaseString
            所以我们可以使用对象名引用成员方法
         */
        //创建MethodRerObject对象
        MethodRerObject obj = new MethodRerObject();
        printString(obj::printUpperCaseString);
    }
}

类名引用静态成员方法

通过类名引用静态成员方法
类已经存在,静态成员方法也已经存在
就可以通过类名直接引用静态成员方法

格式:

  • 类名::成员方法名

super引用类的成员方法

使用super引用类的成员方法
super是已经存在的
父类的成员方法也已经存在的

所以我们可以直接使用super引用父类的成员方法

格式:

  • super::成员方法名

this引用本类的成员方法

使用方法引用优化Lambda表达式
this是已经存在的
本类的成员方法也已经存在的

所以我们可以直接使用this引用本类的成员方法

格式

  • this::方法名

类的构造器(构造方法)引用

使用方法引用优化Lambda表达式
构造方法new Person(String name) 已知
创建对象已知 new

就可以使用Person引用new创建对象

格式:

  • Person::new

数组的构造器引用

使用方法引用优化Lambda表达式
已知创建的就是int[]数组
数组的长度也是已知的

就可以使用方法引用
int[]引用new,根据参数传递的长度来创建数组

格式:

  • int[ ]::new

课外补充

Stream流的补充

Sorted(排序)
排序是一个 中间操作,返回的是排序好后的 Stream。如果你不指定一个自定义的 Comparator 则会使用默认排序。
创建一个集合

List<String> stringList = new ArrayList<>();
stringList.add("ddd2");
stringList.add("aaa2");
stringList.add("bbb1");
stringList.add("aaa1");
stringList.add("bbb3");
stringList.add("ccc");
stringList.add("bbb2");
stringList.add("ddd1");

测试 Sort (排序)

 stringList
              .stream()
              .sorted()
              .filter((s) -> s.startsWith("a"))
              .forEach(System.out::println);// aaa1 aaa2

需要注意的是,排序只创建了一个排列好后的Stream,而不会影响原有的数据源,排序之后原数据stringCollection是不会被修改的:

System.out.println(stringList);// ddd2, aaa2, bbb1, aaa1, bbb3, ccc, bbb2, ddd1

方法引用补充

Java 8允许您通过::关键字传递方法或构造函数的引用。 上面的示例显示了如何引用静态方法。 但我们也可以引用对象方法:

class Something {
    String startsWith(String s) {
        return String.valueOf(s.charAt(0));
    }
}
Something something = new Something();
Converter<String, String> converter = something::startsWith;
String converted = converter.convert("Java");
System.out.println(converted);    // "J"

接下来看看构造函数是如何使用::关键字来引用的,首先我们定义一个包含多个构造函数的简单类:

class Person {
    String firstName;
    String lastName;

    Person() {}

    Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

接下来我们指定一个用来创建Person对象的对象工厂接口:

interface PersonFactory<P extends Person> {
    P create(String firstName, String lastName);
}

这里我们使用构造函数引用来将他们关联起来,而不是手动实现一个完整的工厂:

PersonFactory<Person> personFactory = Person::new;
Person person = personFactory.create("Peter", "Parker");

我们只需要使用 Person::new 来获取Person类构造函数的引用,Java编译器会自动根据PersonFactory.create方法的参数类型来选择合适的构造函数。

HC32F460 FPU实战:从零开启硬件浮点加速 本文详细介绍了如何在HC32F460开发板上启用和优化FPU(浮点运算单元),以显著提升硬件浮点运算性能。从工程配置、关键代码修改到实战优化技巧,全面解析FPU加速的实现方法,并分享常见问题的解决方案,帮助开发者避免常见陷阱,充分发挥HC32F460的硬件潜力。 阅读详情

相关推荐

Mac用户必看:PD虚拟机网络初始化失败的3分钟修复指南(附详细截图)

本文针对Mac用户在Parallels Desktop(PD虚拟机)启动时遇到的“网络初始化失败”问题,提供了快速诊断与修复指南。核心原因是macOS系统更新后权限未正确授予。文章通过详细的三步修复法(关闭进程、修改配置文件、重新授权重启),帮助用户在3分钟内恢复虚拟机网络连接,并附有排查清单与预防建议。

weixin_29231027的博客 538

利用 JDK 17 的 Stream API 实现高效数据处理

Stream API 提供了一种函数式编程风格来操作集合数据,它允许我们以声明式的方式处理数据,而非传统的命令式迭代。简单来说,我们可以用简洁的代码表达复杂的数据转换、过滤和聚合操作。

心猿意码 2274

卡门涡街可视化实战:从网格加密策略到动画后处理技巧

本文详细介绍了利用ANSYS Fluent进行卡门涡街可视化模拟的全流程,包括网格加密策略、求解器设置、涡街捕捉及动画后处理技巧。通过计算流体力学(CFD)方法,帮助工程师和研究人员高效模拟圆柱绕流现象,优化工程设计。

weixin_29309785的博客 414

Java学习(Stream流,使用Stream流的方式,获取Stream流的方式,Stream流中的常用方法,方法引用)

2022/2/18 一、Stream流 I/O流主要用来读写 Stream流用来对集合和数组进行简化操作,将集合和数组转换为Stream流,用Stream流中的方法对集合和数组进行操作,用于解决集合和数组的弊端。1.遍历筛选集合的两种方法对比: package ln.javatest.day17.demo02; /* 使用传统的方法,遍历集合,对集合中的数据进行过滤 */ import java.util.ArrayList; import java.util.List; public class

XXX_17的博客 3389

电流采样电路设计:差分放大与ADC采集详解

在电机控制、电源管理、电池监测等应用中,电流采样是一个关键环节。通常,我们使用小阻值的采样电阻将电流信号转换为电压信号,再通过运放放大后送入ADC进行采集。本文将详细分析一种基于差分放大器的电流采样电路,包括信号放大、参考电压偏置、滤波保护以及ADC转换计算等内容。

W0s477的博客 2万+

【XSRP软件无线电】基于软件无线电平台的FM数字接收系统设计(含有完整工程资料获取链接)

随着无线通信技术的快速发展,软件无线电(Software Defined Radio, SDR)作为一种新兴的无线通信技术,逐渐成为研究和应用的热点。传统的无线接收机通常依赖于专用硬件实现其功能,灵活性和可扩展性有限。相较之下,软件无线电利用软件来实现信号处理和调制解调功能,能够适应多种频率和调制方式,使无线通信系统更加灵活和高效。在FM(频率调制)广播中,数字接收技术的应用不仅提高了信号的抗干扰能力,还能提供更好的音质和更多的附加信息(如广播电台名称、节目内容等)。

嵌入式技术开发 1367

2022/07/17、18 day10/11:Stream流、方法引用

Stream流 方法引用

w2079930908的博客 310

【Bug已解决】Anthropic tool_result 找不到对应 tool use id 解决方案

方案适用场景推荐指数每个tool_use必须生成对应tool_result最基础的原则,所有Harness都必须遵守⭐⭐⭐⭐⭐裁剪历史时成对处理实现了上下文裁剪/压缩逻辑的Harness⭐⭐⭐⭐⭐并行工具调用结果数量校验支持多工具并行调用的场景⭐⭐⭐⭐使用官方SDK高层封装不需要特别定制消息组装逻辑⭐⭐⭐⭐请求前主动校验中间件追求生产级健壮性,提前拦截问题⭐⭐⭐⭐⭐这类报错,本质上是。

一键难忘的博客 1万+

day17-Map集合、Stream流、File类、递归

比如有如下案例:往HashMap集合中存储Student对象作为键,学生的家庭住址当做值。要求,当学生对象的姓名和年龄相同时就认为键重复。

ZHUSHANGLIN的博客 1095

打通ZYNQ的任督二脉:AXI_FIFO数据交互全解析

FIFO(First In First Out,先进先出)是一种经典的数据缓冲结构,就像排队买票一样,先来的人先得到服务。时钟域交叉(CDC):连接不同时钟频率的模块数据缓冲:平衡生产者和消费者的速度差异流量控制:防止数据丢失或溢出input clk,// 输入AXI4-Stream接口(从PS到PL)// 输出AXI4-Stream接口(从PL到PS)// 状态指示信号// 定义状态机状态// 数据缓存// 8个深度的缓存// 流水线处理寄存器。

QQ_778132974的博客 305

【ChatGPT】实用 Prompt 指令大全 —— 一文教你如何更好地挖掘 GPT 的价值

ChatGPT 是由 OpenAI 开发的一种先进的大型语言生成模型,能够理解和生成准确、自然且连贯的文本。文本生成数据分析内容审核语义理解自然语言推理以及其他众多任务ChatGPT是一种基于GPT-3.5架构的大型语言模型,由OpenAI公司开发。该模型在自然语言处理领域有着广泛的应用,可以用于文本生成、文本分类、情感分析、问答系统等任务。本文将从模型的架构、训练方式、优缺点等方面对ChatGPT进行详细介绍。一、模型架构。

AI天才研究院 2万+

Lambda表达式和Stream流执行流程

Data;@Data/*** @param <E1>构造方法第一个参数类型* @param <E2>构造方法第二个参数类型* @param <E3>构造方法第三个参数类型* @param <E4>构造方法第四个参数类型* @param <E5>构造方法第五个参数类型* @param <T>最后一个泛型是构造方法所属的类型*/

HTDiiii的博客 1002

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Day 03 - Lambda和Stream流

Lambda和Stream流 1.lambda概述 ​ Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。 ​ Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。 语法形式 ​ () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)。 语法简化 //1.简化参数类型,可以不写参

hfghrth的博客 2395

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java Stream流常用API

Stream是Java8 API添加的一个新的抽象,称之为流Stream,以一种声明性方式处理数据集合,其侧重于对于源数据计算能力的封装,同时支持序列与并行两种操作方式。

weixin_57684937的博客 1539

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

泛型及其使用、Stream的方法(Java小白进阶day17)

泛型 java泛型设计原则:保证编译时不出错,运行时就不会出现ClassCastException 1、泛型类 在类上定义的泛型,在方法中也可使用 2、泛型接口 interface DemoInter<T>{ void show(T t); } class Demo3Impl1 implements DemoInter<String>{ @Override public void show(String t) { // TODO Auto-generated method

hyj_123的博客 1126

函数式编程-Stream流

​ Lambda是Jdk8中的一个语法糖。它可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。java8的Stream使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合或数组进行链状流式操作。可以更方便的让我们对集合或数组操作。

zyy030616的博客 991

Java进阶DAY26-01-初爽Stream流

Stream流是Java 8中引入的一个强大的API,它以一种声明式的方式让集合操作变得更加简洁和灵活。通过本篇的介绍,希望你能对Stream流有一个初步的了解,并在实际开发中能够运用起来。Stream流的学习是一个循序渐进的过程,今天我们只是初探了Stream流,后续还有更多强大功能等着我们去发现和学习。

tang7mj的博客 466

Java学习笔记day19-可变参数-Stream流

Day19 可变参数 可变参数:就是形参的个数是可以变化的 格式:修饰符 返回值类型 方法名(数据类型… 变量名){} 范例:public static int sum(int… a){} 这里的变量其实是一个数组 如果一个方法有多个参数,包含可变参数,可变参数要放在最后 示例: public class ChangeableTest { public static void main(String[] args) { //调用方法传递数组中的值 int sum

在每个领域闪耀 571

从零开始的java学习Day17----------基础篇(Stream流)

Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢?在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。 Stream流的思想 Stream流,我们可以看成是一条生产线,我们要对多个元素完成多个目标时,可以把所有元素当作一个流模型,搭建一条流,流中可以制定对流模型执行一个...

风色月的技术栈 248

javaSE_day17 学习笔记 ——泛型、Stream

javaSE_day17 1. 泛型什么是泛型1.1 泛型类泛型类派生出的子类 1.2 泛型接口1.3 泛型方法1.5 泛型的使用 -- 通配符 “?”设置通配符的上限、下限通配符的错误使用 2. Stream2.1 流式思想2.2 stream的特性2.3使用Stream流的步骤2.3.1 数据源(sourc...

weixin_44349707的博客 483

Day22_JDK新特性(Lambda表达式,Optional类,StreamAPI,方法引用与构造器引用,java9-17新特性)

在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。编程中的函数,也有类似的概念,你调用我的时候,给我实参为形参赋值,然后通过运行方法体,给你返回一个结果。对于调用者来做,关注这个方法具备什么样的功能。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是谁来做。生活举例:当我们需要从北京到上海时,可以选择高铁、汽车、骑行或是徒步。我们的真正目的是到达上海,而如何才能到达上海的形式并不重要,所以我们一直在探索有没

小丁的博客 1504

stream判断数组长度大于0_Stream流

day14【Stream流】主要内容常用函数式接口Stream流教学目标能够使用Function函数式接口能够使用Predicate函数式接口能够理解流与集合相比的优点能够理解流的延迟执行特点能够通过集合、映射或数组获取流能够掌握常用的流操作能够使用流进行并发操作能够将流中的内容收集到集合中能够将流中的内容收集到数组中第一章 常用函数式接口1.1 Predicate接口有时候我们需要对某种类型的数...

weixin_42305622的博客 661

day13--JDK8~17新特性(上):8的新特性:Lambda表达式+forEach()遍历,方法引用,Stream API

发行版本发行时间备注Java 1.01996.01.23Sun公司发布了Java的第一个开发工具包Java 5.02004.09.30①版本号从1.4直接更新至5.0;②平台更名为JavaSE、JavaEE、JavaMEJava 8.02014.03.18此版本是继Java 5.0以来变化最大的版本。是长期支持版本(LTSJava 9.02017.09.22此版本开始,每半年更新一次Java 10.02018.03.21Java 11.02018.09.25。

aa35434的博客 1111

Java23-day14【函数式接口(Supplier\Consumer\Predicate\Function)、Stream流(生产方式\中间方法\终结方法)】

1.1、函数式接口概述 1.2、函数式接口作为方法的参数 1.3、函数式接口作为方法的返回值 1.4、常用的函数式接口 1.5、Supplier接口 1.6、Consumer接口 1.7、Predicate接口 1.8、Function接口 1.1、体验Stream流 1.2、Stream流的常见生成方式 1.3、Stream流的常见中间操作方法 1.4、Stream流的常见终结操作方法 1.5、Stream流的练习 1.6、Stream流的收集操作

upward 984

Day17--(Stream流 、异常处理、日志框架 )

(Stream流 、异常处理、日志框架 )

小库里的学习记录 162

day 17 03.18 Stream

03.18 数据流 new 克隆 反序列化 产生对象的三种方式 流的基本概念 I/O流 理解流 atm机器,数据保存在内存中,一旦系统运行完毕,或者中途中断退出,当前操作的数据全都消失,下次再访问系统数据已经丢失。 如果要将系统的数据保存起来。留的操作,文件的操作。 — 什么是流? — 在程序中,流的概念:java程序中当需要读取数据的时候,就会开始一个通向数据源的设备流。这个数据...

Theniceday_99的博客 249
上一篇: day16 jdk1.8新特性-1
下一篇: day20 Junit测试、反射、注解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值