java.util.stream_java.util.stream.Stream 接口中的常用方法

流模型的操作很丰富,下面介绍一些常用的API。这些方法可以被分成两种:

延迟方法

返回值类型仍然是 Stream 接口自身类型的方法,因此支持链式调用。(除了终结方法外,其余方 法均为延迟方法。)

终结方法

返回值类型不再是 Stream 接口自身类型的方法,因此不再支持类似 StringBuilder 那样的链式调 用。在这里介绍的终结方法包括 count 和 forEach 方法。

逐一处理:forEach

虽然方法名字叫 forEach ,但是与for循环中的“for-each”昵称不同。

void forEach(Consumer super T> action);

该方法接收一个 Consumer 接口函数,会将每一个流元素交给该函数进行处理。

java.util.function.Consumer接口是一个消费型接口。

Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据。

基本使用:

importjava.util.stream.Stream;public classDemo06ForEach {public static voidmain(String[] args) {

Stream stream = Stream.of("Java", "C", "Python", "Hadoop", "Spark");

stream.forEach(name->System.out.println(name));

}

}

这里调用的of()方法,方法签名:

@SafeVarargspublic static Streamof(T... values) {returnArrays.stream(values);

}

过滤:filter

可以通过 filter 方法将一个流转换成另一个子集流。方法签名:

Stream filter(Predicate super T> predicate);

该接口接收一个 Predicate 函数式接口参数(可以是一个Lambda或方法引用)作为筛选条件。

boolean test(T t);

该方法将会产生一个boolean值结果,代表指定的条件是否满足。如果结果为true,那么Stream流的 filter 方法将会留用元素;如果结果为false,那么 filter 方法将会舍弃元素。

基本使用

Stream流中的 filter 方法基本使用的代码如:

importjava.util.stream.Stream;public classDemo07StreamFilter {public static voidmain(String[] args) {

Stream original = Stream.of("Java", "C", "Python", "Hadoop", "Spark");

Stream result = original.filter(s -> s.length() >= 5);

result.forEach(System.out::println);

}

}

运行程序,控制台输出:

Python

Hadoop

Spark

这个例子中,通过Lambda表达式来指定了筛选的条件:字符串的长度要大于等于5。

映射:map

如果需要将流中的元素映射到另一个流中,可以使用 map 方法。方法签名:

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

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

java.util.stream.Function 接口是一个函数式接口,其中唯一的抽象方法为:

R apply(T t);

这可以将一种T类型转换成为R类型,而这种转换的动作,就称为“映射”。

基本使用

Stream流中的 map 方法基本使用的代码如:

importjava.util.stream.Stream;public classDemo08StreamMap {public static voidmain(String[] args) {

Stream original = Stream.of("100", "200", "300");

Stream result = original.map(str ->Integer.parseInt(str));

result.forEach(System.out::println);

}

}

运行程序,控制台输出:

100

200

300

这段代码中, map 方法的参数通过方法引用,将字符串类型转换成为了int类型(并自动装箱为 Integer 类对象)。然后调用Stream接口中的forEach方法,逐一输出结果。

统计个数:count

正如旧集合 Collection 当中的 size 方法一样,流提供 count 方法来数一数其中的元素个数:

long count();

该方法返回一个long值代表元素个数(不再像旧集合那样是int值)。

基本使用

importjava.util.stream.Stream;public classDemo09StreamCount {public static voidmain(String[] args) {

Stream original = Stream.of("Java", "C", "Python", "Hadoop", "Spark");

Stream result = original.filter(s -> s.length() >= 5);

System.out.println(result.count());

}

}

运行程序,控制台输出:

3

取用前几个:limit

limit 方法可以对流进行截取,只取用前n个。方法签名:

Stream limit(long maxSize);

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

基本使用

importjava.util.stream.Stream;public classDemo10StreamLimit {public static voidmain(String[] args) {

Stream original = Stream.of("Java", "C", "Python", "Hadoop", "Spark");

Stream result = original.limit(3);

result.forEach(System.out::println);

}

}

运行程序,控制台输出:

Java

C

Python

跳过前几个:skip

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

Stream skip(long n);

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

基本使用

importjava.util.stream.Stream;public classDemo11StreamSkip {public static voidmain(String[] args) {

Stream original = Stream.of("Java", "C", "Python", "Hadoop", "Spark");

Stream result = original.skip(3);

result.forEach(System.out::println);

}

}

运行程序,控制台输出:

Hadoop

Spark

组合:concat

如果有两个流,希望合并成为一个流,那么可以使用 Stream 接口的静态方法 concat:

static Stream concat(Stream extends T> a, Stream extends T> b)

备注:这是一个静态方法,与 java.lang.String 当中的 concat 方法是不同的。

基本使用

importjava.util.stream.Stream;public classDemo12StreamConcat {public static voidmain(String[] args) {

Stream original1 = Stream.of("Java", "C", "Python");

Stream original2 = Stream.of("Hadoop", "Spark");

Stream result =Stream.concat(original1, original2);

result.forEach(System.out::println);

}

}

运行程序,控制台输出:

Java

C

Python

Hadoop

Spark

Stream 接口中的常用方法就介绍到这里,为了加深理解,可以看一下使用Stream方式完成的简单练习。

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

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

相关文章

SRM 698 div1 RepeatString

250pts RepeatString 题意:问最少修改多少次将一个字符串修改为AA的形式。可以插入一个字符,删除一个字符,修改字符。 思路:枚举分界点,然后dp一下。 1 /*2 * Author: mjt3 * Date: 2018-10-17 19:50:164 * Last Mod…

java学习(38):数组排序(直接排序)

/5 有一个长度为10的int类型数组,存储了10个年龄数据,利用Eclipse工具设计一个java控制台程序, 完成将这个int类型数组中年龄进行算法对比,将10个年龄重新存储在新数组中,新数组中存储年龄应符合以下规则: 降序排列 ./ import java.util.Scanner; public class test07 { public…

java学习(39):九九乘法表

public class test08{ public static void main(String[] args){ for(int i1;i<9;i){ System.out.println(); for(int j1;j<i;j){ System.out.print("\t"i""j""(ij)); } } } }

java 私有变量访问_Java - 访问私有实例变量

我需要从以下类列表(Species.java)访问私有变量&#xff0c;以便在KlingonOx.java类中使用它们。KlingonOx.java类的目的是确定大象物种的种群数量将大于克林贡牛种的数量。这是Species.java类&#xff1a;import java.util.Scanner;public class Species{private String name;…

setState是异步还是同步?

react中setState是同步还是异步困扰了好久&#xff0c;今天终于有了答案&#xff1b;它既是同步的&#xff0c;也是异步的&#xff1b; 批量更新&#xff1a; 加入我在页面上写三个setState去分别 componentDidMount() {this.setState({ val: this.state.val 1 }) console.log…

java学习(40):成员实例的定义和访问

定义一个student类 public class student { String name;//输入姓名 int age;//输入年龄 String address;//输入地址 char sex;//输入性别 double height;//输入身高 } 定义一个teststudent类 //成员实例的定义和访问 public class testStudent { public static void main(Stri…

简易计算器 java_终于写出一个简单的计算器了

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import javax.swing.*;import java.awt.event.*;import java.awt.*;import java.util.Scanner;//import java.util.Scanner;public class Jisuanji {JLabel JLabel1;JLabel JLabel2;JLabel JLabel3;//标签JFrame mainJFrame;//布局…

2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)

传送门 听说是最长反链衍生出的对偶定理就能秒了。 本蒟蒻直接用线段树模拟维护的。 对于第一维排序。 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解。代码 转载于:https://www.cnblogs.com/ldxcaicai/p/10084858.html

java学习(41):成员实例的定义和访问续

定义一个studentstudy类 /1 使用Eclipse编写控制台应用程, 编写一个用来表示学生的java类&#xff0c; 并在类中定义描述学生特征的属性&#xff0c;姓名&#xff0c;年龄&#xff0c;性别&#xff0c;身高&#xff0c;体重和电话&#xff0c; 要求属性设置为私有访问级别并为私…

brew 安装 mysql5.7_Mac——brew替换源地址安装配置mysql@5.7版本

问题描述&#xff1a;使用brew方式安装mysql&#xff0c;存在以下问题&#xff1a;1.由于mysql已经升级到8.x版本&#xff0c;会默认安装8.x版本&#xff0c;会对之前部分特性不友好支持&#xff1b;2.brew默认安装源下载响应时间非常慢&#xff0c;下载时间过长容易超时&#…

ftp的本地用户搭建

前期的准备跟虚拟用户一样&#xff0c;就是配置文件不一样 修改配置文件 就是共享的都是自己的账号的家目录&#xff0c;然后启动服务就可以了 本地登陆的都是自己的账号密码 ftp本地的黑名单&#xff0c; 转载于:https://www.cnblogs.com/cash-su/p/9824553.html

java学习(42):巩固练习

定义一个testjava类 /*4 编写一个TestStudentOverrideConstructor.java类&#xff0c; 包含main方法&#xff0c;从控制台接收用户输入的学生信息&#xff0c;包括学生姓名&#xff0c;性别和年龄&#xff0c;使用带参数的构造器创建学生对象并将接收到的输入传递给这个构造器参…

错误解决:常出现在iis搭建网站

不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定 在全新安装的IIS7下搭建网站&#xff0c;访问页面时出现错误信息如下&#xff1a; 配置错误 不能在此路径中使用此配置节。如果在父级别上锁定了该节&#xff0c;便会出现这种情况。锁定是默认…

java收发邮寄_JavaMail收发邮件的一般流程与主要方法

1、Properties属性类Properties p new Properties();p.put(key, value);key-| mail.smtp.host-| mail.smtp.port-| mail.smtp.auth->"true":"false"2、生成Authenticator的子类Overrideprotected PasswordAuthenticationgetPasswordAuthentication(){r…

Java中TreeMap和TreeSet的底层实现

TreeSet底层则采用NavigableMap这个接口来保存TreeSet集合&#xff0c;而实际上NavigableMap只是一个接口&#xff0c;实际上TreeSet还是用TreeMap来保存set元素。 TreeSet初始化的时候会new 一个TreeMap进行初始化&#xff1b; private transient NavigableMap<E,Object>…

oracle 11g数据库数据操作(亲测)

oracle 11g安装和oracle数据库监听配置就不说了&#xff0c;直接说数据库的相关操作 建立 wiicare 用户 create directory dump_dir as ‘d:\test\dump’; 使用 PLSQL Developer 连接数据库 登陆数据库&#xff0c;用户名:system 密码: 123456 连接为&#xff1a;sysdba 新建表…

使用mybatis操作AS400数据库

先简单说一下怎么使用【jt400.jar】连接AS400上的DB2数据库。 ※ jt400.jar资源&#xff0c;如果有安装AS400客户端的话&#xff0c;参考IBM官网 ※ http://www-01.ibm.com/support/docview.wss?uidswg21398042 安装目录下就有jt400.zip&#xff0c;改个后缀就能用了。 如果没…

java ajax 获取headers_Ajax获取Response头信息

$.ajax({type: HEAD, // 获取头信息&#xff0c;typeHEAD即可url : window.location.href,complete: function( xhr,data ){// 获取相关Http Response headervar wpoInfo {// 服务器端时间"date" : xhr.getResponseHeader(Date),// 如果开启了gzip&#xff0c;会返回…

oracle 数据操作的相关参数

ATTACH 连接到现有作业。 例如, ATTACHjob_name。 CONTENT 指定要加载的数据。 有效的关键字为: [ALL], DATA_ONLY 和 METADATA_ONLY。 DATA_OPTIONS 数据层选项标记。 有效的关键字为: SKIP_CONSTRAINT_ERRORS。 DIRECTORY 用于转储文件, 日志文件和 SQL 文件的目录对象。 …

【论文阅读】Deep Adversarial Subspace Clustering

导读&#xff1a; 本文为CVPR2018论文《Deep Adversarial Subspace Clustering》的阅读总结。目的是做聚类&#xff0c;方法是DASCDSC&#xff08;Deep Subspace Clustering&#xff09;GAN&#xff08;Generative Adversarial Networks&#xff09;。本文从以下四个方面来对论…