Stream流的基本使用方法

Stream流的基本使用方法

0.常用方法

在介绍的各种方法中,凡是返回值仍然为Stream接口的为函数拼接方法,它们支持链式调用;而返回值不再为Stream接口的为终结方法,不再支持链式调用。如下表所示:

方法名方法作用方法种类是否支持链式调用
count统计个数终结
forEach逐一处理终结
filter过滤函数拼接
limit取用前几个函数拼接
skip跳过前几个函数拼接
map映射函数拼接
concat组合函数拼接

1.测试类

package com.william;import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Stream;/*** 终结方法count(),forEach() 只能使用一次Stream* 使用多次会抛异常:流已被操作或关闭* Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed*/
public class Test {public static void main(String[] args) {//ArrayList集合System.out.println("--------ArrayList----------");ArrayList<String> objects = new ArrayList<>();objects.add("科比");objects.add("詹姆斯");objects.add("乔丹");objects.add("姚明");objects.add("艾弗森");objects.add("奥尼尔");objects.add("加内特");Stream<String> stream = objects.stream();stream.forEach(s -> System.out.println(s));// Stream<String> stringStream = stream.filter(s -> s.length() == 3).filter(s->s.endsWith("森"));//Stream<String> stringStream = stream.filter(s -> s.startsWith("科"));// stringStream.forEach(s1 -> System.out.println(s1));System.out.println("----------Map-------------");HashMap<String, Object> map = new HashMap<>();map.put("1","value1");map.put("2","value2");map.put("3","value3");map.put("4","value4");System.out.println("---------遍历map方式1 keys和values分开-------------");
//        Set<String> strings = map.keySet();
//        Collection<Object> values = map.values();
//        Stream<String> stream1 = strings.stream();
//        stream1.forEach(s-> System.out.println(s));
//        Stream<Object> stream2 = values.stream();
//        stream2.forEach(s2-> System.out.println(s2));System.out.println("---------遍历map方式2 entrySet-------------");Set<Map.Entry<String, Object>> entries = map.entrySet();Stream<Map.Entry<String, Object>> stream3 = entries.stream();
//        stream3.filter(s->s.getKey()=="1").forEach(s3-> System.out.println(s3));long count = stream3.count();System.out.println(count);
//        ThreadMain threadMain = new ThreadMain();
//        threadMain.start();
//        Thread thread = Thread.currentThread();
//
//        for (int i = 0; i < 100; i++) {
//            System.out.println( thread.getName()+"  :   "+thread.getId()+"main---"+i);
//        }System.out.println("--------------数组-------------");String[] array = {"1","2","3","4"};Stream<String> array1 = Stream.of(array);array1.forEach(sa-> System.out.println(sa));Stream<String> babys = Stream.of("火娃", "水娃", "土娃", "金刚娃", "葫芦娃", "千里眼", "顺风耳", "爷爷", "蛇精");babys.filter(s -> s.contains("娃")).filter(s -> s.length()==3).forEach(s -> System.out.println(s));System.out.println("----------limit&skip------------");//String[] limitDemo={"美国队长","绿巨人","钢铁侠","蜘蛛侠","蜂人","黑豹","蝙蝠侠","黑寡妇"};Stream<String> limitDemoStream = Stream.of("美国队长", "绿巨人", "钢铁侠", "蜘蛛侠", "蜂人", "黑豹", "蝙蝠侠", "黑寡妇");//limitDemoStream.limit(4).forEach(s -> System.out.println(s));//获取前四个//获取前四个的后两个limitDemoStream.limit(4).skip(2).forEach(s -> System.out.println(s));System.out.println("-------将stream转换为persion对象------------");Stream<String> limitDemoStream1 = Stream.of("美国队长", "绿巨人", "钢铁侠", "蜘蛛侠", "蜂人", "黑豹", "蝙蝠侠", "黑寡妇");limitDemoStream1.map(s -> new Persion(s)).forEach(s-> System.out.println(s));System.out.println("--------将stream流进行合并--------------");Stream<String> limitDemoStream11 = Stream.of("美国队长", "绿巨人", "钢铁侠", "蜘蛛侠", "蜂人", "黑豹", "蝙蝠侠", "黑寡妇");Stream<String> babys1 = Stream.of("火娃", "水娃", "土娃", "金刚娃", "葫芦娃", "千里眼", "顺风耳", "爷爷", "蛇精");Stream.concat(babys1,limitDemoStream11).forEach(s -> System.out.println(s));}
}

2.实体类Persion

package com.william;public class Persion {private String name;public Persion(String name) {this.name = name;}public Persion() {}@Overridepublic String toString() {return "Persion{" +"name='" + name + '\'' +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
package com.asx.application.common.utils;import java.util.*;
import java.util.stream.Collectors;
//Stream(流)是一个来自数据源的元素队列并支持聚合操作
//
//        元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。
//        数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
//        聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。
//        和以前的Collection操作不同, Stream操作还有两个基础的特征:
//
//        Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
//        内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。
public class demo {public static void main(String[] args) {//List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());;filtered.forEach(s-> System.out.println(s));
//        forEach
//        Stream 提供了新的方法 'forEach' 来迭代流中的每个数据。以下代码片段使用 forEach 输出了10个随机数Random random = new Random();random.ints().limit(10).forEach(System.out::println);
//        map
//        map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取对应的平方数List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());squaresList.forEach(s-> System.out.println(s));//效果相同squaresList.forEach(System.out::println);//效果相同List<String>string1 = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");// 获取空字符串的数量long count = string1.stream().filter(string -> string.isEmpty()).count();System.out.println(count);Random random1 = new Random();random1.ints().limit(10).forEach(System.out::println);
//        Collectors
//        Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串List<String>strings2 = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");List<String> filtered1 = strings2.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());System.out.println("筛选列表: " + filtered1);String mergedString = strings2.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));System.out.println("合并字符串: " + mergedString);List<Integer> numbers12 = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
//统计IntSummaryStatistics stats = numbers12.stream().mapToInt((x) -> x).summaryStatistics();IntSummaryStatistics intSummaryStatistics = numbers12.stream().mapToInt((a) -> a).summaryStatistics();System.out.println("列表中最大的数 : " + stats.getMax());System.out.println("列表中最小的数 : " + stats.getMin());System.out.println("所有数之和 : " + stats.getSum());System.out.println("平均数 : " + stats.getAverage());}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iTerm2主题

iTerm2 最常用的主题是 Solarized Dark theme&#xff0c;下载地址&#xff1a;http://ethanschoonover.com/solarized 下载的是压缩文件&#xff0c;你先解压一下&#xff0c;然后打开 iTerm2&#xff0c;按 Command , 键&#xff0c;打开 Preferences 配置界面&#xff0c;…

包包各部位名称图解_品尝烤肉必备!日本和牛各部位名称中日翻译对照 点餐更轻松...

谈到日本美食&#xff0c;又怎么能少了在全球首屈一指的和牛&#xff1f;但是日本大部分烤肉餐厅里的菜单都是日语&#xff0c;而且肉的部分众多&#xff0c;点餐时一定傻傻分不清&#xff0c;一脸懵逼了&#xff01;今天小T为大家分享日本和牛肉各部位名称的中日语对照&#x…

Java程序开发三步骤:编写、编译、运行

1.Java语言跨平台原理 1.1Java虚拟机——JVM JVM&#xff08;Java Virtual Machine &#xff09;&#xff1a;Java虚拟机&#xff0c;简称JVM&#xff0c;是运行所有Java程序的假想计算机&#xff0c;是Java程序的 运行环境&#xff0c;是Java 最具吸引力的特性之一。我们编写…

corda_Corda服务的异步流调用

corda如何使流程更快&#xff1f; 如果您与Corda合作已有一段时间&#xff0c;那么您很有可能已经考虑过这一点。 您可以通过以下几方面进行合理的调整以提高性能&#xff1a;事务大小&#xff0c;优化查询并减少整个Flow执行过程中所需的网络跃点数。 在某种程度上&#xff0c…

Powerline专用字体安装_PowerFonts字体库安装_Meslo LG字体安装

文章目录单独下载某个 Meslo LG 字体通过命令方式安装全部 Meslo LG 字体zsh 如果使用主题 agnoster&#xff0c;而该主题依赖于 Powerline&#xff0c;而 Powerline 的正常显示有依赖于字体 Meslo LG&#xff0c;要不然会出现乱码的情况&#xff0c;如下所示&#xff1a;单…

delphi7 中文注释字体_使用nerd-font/font-patcher为字体添加字体图标

Nerd-fonts常用来在终端下显示各种图标&#xff0c;这个项目的github repo下提供了许多Nerd Font字体&#xff0c;图标使用效果如图。由于目前Windows Terminal还不支持设置第二字体&#xff0c;要想使用nerd font就必须替换掉原有字体。Nerd font的github页面下提供了许多常见…

Mybatis框架(待完善)

框架 框架&#xff08;Framework&#xff09;是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法&#xff1b;另一种定义认为&#xff0c;框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。 简而言之&a…

MacOS安装Powerline

文章目录安装卸载查看配置&#xff08;可以忽略这部分&#xff09;Powerline 是一款比较酷炫的状态栏工具&#xff0c;可以美化终端和 vim 界面&#xff0c;由 python 开发&#xff0c;目前仅支持 python2.X&#xff0c;由于 python2 和 python3 互不兼容&#xff0c;安装前要了…

充电器用着用着就松了怎么办_手机充电口松动怎么办?

如果手机充不进电&#xff0c;首先要检查充电器是否完好&#xff0c;如果充电器完好才考虑手机充电接口松动的可能性。手机充电口松动时&#xff0c;先换一个充电器试试&#xff0c;好多原装充电器接口挤压或踩压难免变薄&#xff0c;而手机接口长时间充电时抻曳也难免变大&…

jakarta ee_适用于Java EE / Jakarta EE开发人员的Micronaut

jakarta ee城镇中有一个名为Micronaut的新微服务框架。 在本文中&#xff0c;我将从Java EE / Jakarta EE的角度讨论如何冒险使用Micronaut框架。 我是Java EE开发人员&#xff0c;因此使用诸如Eclipse MicroProfile之类的解决方案开发微服务更接近我的专业知识&#xff0c;但是…

mysql(待完善)

下载 https://www.mysql.com/cn/downloads/ 下载步骤 1.MYSQL Comunity(GPL) Downloads 2.MySql Community Server 3.根据自己电脑配置下载 4.直接下载 5.注意安装的密码加密方式 选择 使用旧版密码加密 一定要选择Use Legacy Password Encryption。&#xff08;备注&#x…

配置 Powerline 到 Vim

只需要在 vim 的配置文件 .vimrc 里面加上以下语句&#xff0c;再重启一下终端就可以啦&#xff5e; set rtp/usr/local/lib/python2.7/site-packages/powerline/bindings/bash/powerline.shset nocompatible set t_Co256let g:minBufExplForceSyntaxEnable 1 python from po…

c++判断二叉树是否为二叉搜索树_原创 | 好端端的数据结构,为什么叫它SB树呢?...

点击上方蓝字&#xff0c;关注并星标&#xff0c;和我一起学技术。大家好&#xff0c;今天给大家介绍一个很厉害的数据结构&#xff0c;它的名字就很厉害&#xff0c;叫SB树&#xff0c;业内大佬往往叫做傻叉树。这个真不是我框你们&#xff0c;而是它的英文缩写就叫SBT。SBT其…

ide 日志 乱码_IDE日志分析方法pt。 1个

ide 日志 乱码介绍 我认为大多数软件工程师都了解日志的重要性。 它们已成为软件开发的一部分。 如果无法解决问题&#xff0c;我们尝试在日志中查找原因。 对于一些简单的情况&#xff0c;当错误阻止应用程序打开窗口时&#xff0c;这可能就足够了。 您可以在日志中找到问题&a…

.bash_profile vs .bashrc

请参阅&#xff1a;https://joshstaiger.org/archives/2005/07/bash_profile_vs.html

生成ssh证书(windows)

ssh -keygen -t rsa 生成ssh证书 /home/work/.ssh authorized_keys 客户端建立私钥和公钥 在客户端终端运行命令 ssh-keygen -t rsa https://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646346.html https://blog.csdn.net/qq_36667170/article/details/79094257

日志间隔_在日志中搜索时间间隔

日志间隔介绍 这篇文章与我有关日志分析的迷你系列文章间接相关。 最好阅读两个主要部分&#xff0c;以更好地理解我在说什么。 第1 部分 &#xff0c; 第2部分 。 这篇文章描述了我在实现IDE方法时遇到的一个重要问题。 任务描述 当某人使用日志时&#xff0c;通常只需要调查…

如果在iTerm2中复制命令特别卡,就跟慢动作似的,怎么办?

如果在 iTerm2 中复制命令特别卡&#xff0c;就跟慢动作似的。你可以编辑 ~/.zshrc&#xff1a; vim ~/.zshrc增加如下内容&#xff1a; pasteinit() {OLD_SELF_INSERT${${(s.:.)widgets[self-insert]}[2,3]}zle -N self-insert url-quote-magic # I wonder if youd need .ur…

lambda表达式的使用

package com.asx.application.common.utils;import org.junit.Test;import java.util.Comparator; import java.util.function.Consumer;/*** lambda表达式的使用* 1.举例:(o1,o2) -> Integer.compare(o1,o2) ;* 2.格式* ->&#xff1b;lambda操作符 或 箭头操作符* ->…

centos桥接模式怎么联网_今日回收 | 互联网+废品回收模式是怎么兴起的呢?

随着社会的不断发展和进步&#xff0c;废品回收已不再是传统和低效的行业&#xff0c;而是我国现如今整合资源的重要手段。而该行业之所以能够有如此成就&#xff0c;只因其中98%的企业结合了互联网&#xff0c;成功实现了企业转型。据统计&#xff0c;我国目前废品回收的相关企…