Stream-JDK8

Stream概念 

代码示例 

package com.zz.stream;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 使用Stream流
 * 找出姓张并且是三个字的名字
 */
public class Test {
    public static void main(String args[]){
        List<String> names = new ArrayList <>();
        Collections.addAll(names, "张无忌", "赵四", "张三", "李四", "张缘结");
        System.out.println(names);

        //使用原始方法
        List<String> list = new ArrayList <>();
        for (String name:names) {
            if(name.startsWith("张") && name.length() == 3){
               list.add(name);
            }
        }
        System.out.println(list);

        //使用Stream流
        List<String> list1 = names.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).collect(Collectors.toList());
        System.out.println(list1);
    }
}
  1. names.stream(): 这部分将names列表转换成一个流(Stream)。流是Java 8中引入的一个新特性,它允许你以声明性方式处理数据集合(如列表、集合等)。

  2. filter(s -> s.startsWith("张")): 第一个filter方法用于过滤流中的元素。它接受一个Predicate(谓词),该谓词是一个函数式接口,用于定义一个测试条件。在这里,谓词是一个lambda表达式s -> s.startsWith("张"),它检查每个字符串是否以“张”开头。只有满足这个条件的字符串才会被保留在流中。

  3. filter(s -> s.length() == 3): 第二个filter方法再次过滤流中的元素。它使用了另一个lambda表达式s -> s.length() == 3作为谓词,该谓词检查每个字符串的长度是否为3。只有长度为3的字符串才会被保留在流中。

需要注意的是,这里连续调用了两次filter方法。流中的每个元素首先会经过第一个filter方法的检查,然后再经过第二个filter方法的检查。只有同时满足这两个条件的元素才会被保留。

  1. collect(Collectors.toList()): 最后,collect方法用于将过滤后的流收集到一个新的列表中。Collectors.toList()是一个收集器(Collector),它告诉collect方法如何收集流中的元素。在这个例子中,它将流中的元素收集到一个新的List中。

Stream流的使用步骤 

1.获取Stream流

  1.  List集合获取Stream流
  2. Map集合获取Stream流
  3. Set集合获取Stream流
  4. 数组获取Stream流

代码示例

package com.zz.stream;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Test2 {
    public static void main(String args[]){
        //1.集合获取Stream流
        List<String> names = new ArrayList <>();
        Collections.addAll(names, "刘德华", "朱子晴", "朱德", "郭富城");
        List<String> list = names.stream().filter(s -> s.contains("德")).collect(Collectors.toList());
        System.out.println(list);

        //2.Set集合获取Stream流
        Set<String> set = new HashSet <>();
        Collections.addAll(set, "刘德华", "朱子晴", "朱德", "郭富城");
        Stream<String> stream = set.stream();
        stream.filter(s -> s.contains("朱")).forEach(s -> System.out.println(s));

        //使用Map集合获取Stream流
        Map<String, Double> map = new HashMap <>();
        map.put("白骨精", 145.9);
        map.put("牛魔王", 180.3);
        map.put("孙悟空", 156.4);
        /**
         * Map集合不能直接获取Stream流
         * 解决方法
         * 1.通过Set<String> keys = map.keySet();获取键流
         *  Collection<Double> values = map.values();获取值流
         *  2.使用Entry封装键值对:Set<Map.Entry<String, Double>> entries = map.entrySet();
         */
        Set<String> keys = map.keySet();
        Stream<String> ks = keys.stream();//获取到键的流

        Collection<Double> values = map.values();
        Stream<Double> vs = values.stream();

        Set<Map.Entry<String, Double>> entries = map.entrySet();
        Stream<Map.Entry<String, Double>> kvs = entries.stream();
        kvs.filter(e -> e.getKey().contains("牛")).forEach(s -> System.out.println(s.getKey() + "=" + s.getValue()));

        //数组获取Stream流
        String[] names2 = {"张护", "妞儿", "bab"};
        Stream<String> s1 = Arrays.stream(names2);
        Stream<String> s2 = Stream.of(names2);
    }
}

2.Stream常用的中间方法

 3.Stream流常见的终结方法

 

注意:流只能收集一次 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/452397.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cesiumlab白模效果一

效果 步骤 1、准备shp面数据 2、打开cesiumlab软件转换 选择shp面数据 设置高度&#xff0c;如果shp面中有高度字段&#xff0c;可以用高度字段&#xff0c;如果没有&#xff0c;可以用固定高度 设置贴图&#xff0c;这边用的是第二张效果&#xff0c;当然也可以用自己的贴图…

‘UnityEngine.Application‘ does not contain a definition for isBatchMode

unity 2017.4.37f1. 解决办法: Try to replace Application.isBatchMode with UnityEditorInternal.InternalEditorUtility.inBatchMode

MySQL实战:问题排查与监控

常见问题 有更合适的索引不走&#xff0c;怎么办&#xff1f; MySQL在选取索引时&#xff0c;会参考索引的基数&#xff0c;基数是MySQL估算的&#xff0c;反映这个字段有多少种取值&#xff0c;估算的策略为选取几个页算出取值的平均值&#xff0c;再乘以页数&#xff0c;即…

AI新工具(20240312) Midjourney官方发布角色一致性功能;免费且开源的简历制作工具;精确克隆语调、控制声音风格

1: Midjourney角色一致性功能 使人物画像在多方面高度一致成为可能。 Midjourney的角色一致性功能的使用方法如下&#xff1a; ⭐在你的输入指令后面加上 --cref URL&#xff0c;其中URL是你选择的角色图像的链接。 ⭐你可以通过 --cw 参数来调整参照的强度&#xff0c;范围…

Selenium控制已运行的Edge和Chrome浏览器(详细启动步骤和bug记录)

文章目录 前期准备1. 浏览器开启远程控制指令&#xff08;1&#xff09;Edge&#xff08;2&#xff09;Chrome 2. 执行python代码&#xff08;1&#xff09;先启动浏览器后执行代码&#xff08;2&#xff09;通过代码启动浏览器 3. 爬取效果3. 完整代码共享3.1 包含Excel部分的…

旅游景区公共广播 园区广播 公路服务区广播

旅游景区公共广播 园区广播 公路服务区广播 旅游景区公共广播 旅游景区公共广播(又称背景音乐)简称BGM&#xff0c;它的主要作用是掩盖噪声并创造一种轻松和谐的气氛&#xff0c;是一种创造轻松愉快环境气氛的音乐。掩盖环境噪声&#xff0c;创造与旅游景区相适应的气氛&#…

ubuntu20.04上获取Livox Avia雷达点云数据

若拿到手的Livox Avia激光雷达不知道它的ip信息&#xff0c;可以在官网上LiDAR Sensors - Livox下载上位机软件Livox Viewer&#xff0c;查看IP&#xff0c;下载window版本就可以。雷达通过网线连上电脑后&#xff0c;该软件就可以自动识别出来。按照下图步骤&#xff0c;就可以…

自动化运维工具---------------ANSIBLE

一、Ansible 发展史及功能 作者&#xff1a;Michael DeHaan&#xff08; Cobbler pxe kikstar 与 Func 作者&#xff09;ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具&#xff0c;使用它可以在相距数光年的距离&#xff0c;远程实时控制前线的舰队战斗2…

遥感云计算的一个拐点

GeoForge&#xff0c;一个值得关注的遥感大数据应用 简介 GeoForge是由Ageospatial公司开发的一个基于大语言模型(GeoLLMs)的地理空间分析平台。GeoForg的目的是使每个人都可以轻松进行地图绘制和地理空间分析&#xff0c;无论您是外行还是专家。 Geo for ChatGPT 作者团队已…

Extropic.AI:终结GPU/TPU的热力学未来Chip?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

一台GTX1080显卡的怪兽,我可不能错过这个机会!

标题&#xff1a;我花了30块钱买了一台电脑主机。 这个配置能赚钱吗&#xff1f; 1. 收购惊喜 那是一个阳光明媚的下午&#xff0c;我在水管修理店里闲逛。 突然&#xff0c;一位老顾客手里拿着一台旧电脑主机匆匆走了进来。 他说&#xff1a;“小王&#xff0c;你能帮我看看…

芯片电源设计原则

一、芯片供电 每路电源都要求在一定范围内。每路电源都有允许的输入电压范围。可能需求多路电源&#xff1b;可能分模块供给。 不同模块对电源质量的要求可能不同。有些模块可能较为敏感&#xff0c;抗扰度低。有些模块可能容易干扰其他模块。 电源分配网络存在一定电感&…

07-java基础-锁之AQSReentrantLockBlockingQueueCountDownLatchSemapho

文章目录 0&#xff1a;AQS简介-常见面试题AQS具备特性state表示资源的可用状态AQS定义两种资源共享方式AQS定义两种队列自定义同步器实现时主要实现以下几种方法&#xff1a;同步等待队列条件等待队列 1&#xff1a;AQS应用之ReentrantLockReentrantLock如何实现synchronized不…

string的使用

前言 我们前面已经介绍了C的基本知识&#xff0c;本期开始我们将进入C的第二部分&#xff0c;也是非常重要的一个部分&#xff01;他就是STL&#xff01;本期我们来先介绍string及其使用&#xff01; 本期内容介绍 STL介绍 为什么要学习string? string的常用接口介绍 一、ST…

【Twinmotion】Twinmotion导入UE5

步骤 1. 在虚幻商城中安装“Datasmith Twinmotion导入器插件” 安装“面向虚幻引擎的Twinmotion内容” 2. 打开虚幻引擎&#xff0c;在插件中搜索“twinmotion”&#xff0c;勾选如下两个插件&#xff0c;然后重启虚幻引擎 3. 打开Twinmotion&#xff0c;随便添加一个物体 导出…

NAND和NOR Flash 完全学习笔记

本文要点&#xff1a; NAND FLASH与NOR FLASH 的技术对比&#xff1b;最详细的存储单元对比详解&#xff1b;NAND FLASH与NOR FLASH 的最新市场份额及应用&#xff1b;NAND FLASH与NOR FLASH 的基础原理分析。 目前&#xff0c;NOR FLASH和NAND FLASH是市场上主要的非易失性闪…

李彦宏:在中文上文心大模型4.0已经超过了GPT-4!如何优雅地反驳

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

<逻辑回归算法(Logistic regression)>——《机器学习算法初识》

目录 一、 逻辑回归介绍 1 逻辑回归的应用场景 2 逻辑回归的原理 2.1 输入 2.2 激活函数 3 损失以及优化 3.1 损失 3.2 优化 4 小结 二、逻辑回归api介绍 实现过程&#xff1a; 三、分类评估方法 1.分类评估方法 1.1 精确率与召回率 1.1.1 混淆矩阵 1.1.2 精确…

【五、接口自动化测试】5分钟掌握python + requests接口测试

你好啊&#xff01;我是山茶&#xff0c;一个持续探索AI 测试的程序员&#xff01; 在做接口测试时&#xff0c;在python中内置了HTTP库 urllib&#xff0c;可以用于发送http请求。基于urllib二次封装的三方库Requests&#xff0c;相较于urllib更佳简介易用。所以&#xff0c;…

LED基础知识分享(一)

大家好&#xff0c;我是砖一。 今天给大家分享一下&#xff0c;LED的基础知识&#xff0c;有照明行业&#xff0c;或者对LED感兴趣的朋友&#xff0c;可以学习一下&#xff0c;希望对你有用~ 一&#xff0c;什么是LED (Light Emitting Diode)? 1&#xff0c;LED是一种发出某…