JAVA8 Stream接口,map操作,filter操作,flatMap操作

JAVA8 Stream接口,map操作,filter操作,flatMap操作这篇,我们来看Stream的一些中间操作,关于中间操作的一些介绍,可以看《JAVA8stream接口中间操作和终端操作》1,filter操作,我们先看方法的定义Stream<T>filter(Predicate<?superT>predicate);这个方法,传入一个Predicate的函数接口,关于Predicate函数接口定义,可以查看《JAV…

大家好,又见面了,我是你们的朋友全栈君。

这篇,我们来看Stream的一些中间操作,关于中间操作的一些介绍,可以看《JAVA8 stream接口 中间操作和终端操作》

1,filter操作,我们先看方法的定义

Stream<T> filter(Predicate<? super T> predicate);

这个方法,传入一个Predicate的函数接口,关于Predicate函数接口定义,可以查看《JAVA8 Predicate接口》,这个接口传入一个泛型参数T,做完操作之后,返回一个boolean值;filter方法的作用,是对这个boolean做判断,返回true判断之后的对象,下面一个案例,可以看到怎么使用

String[] dd = { "a", "b", "c" };
		Stream<String> stream = Arrays.stream(dd);
		stream.filter(str -> str.equals("a")).forEach(System.out::println);//返回字符串为a的值

2.map操作,先看方法定义

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

这个方法传入一个Function的函数式接口,接口定义可以查看《JAVA8 Function接口》,这个接口,接收一个泛型T,返回泛型R,map函数的定义,返回的流,表示的泛型是R对象,这个表示,调用这个函数后,可以改变返回的类型,先看下面的案例

public class TestJava8 {
	public static void main(String[] args) {
		Integer[] dd = { 1, 2, 3 };
		Stream<Integer> stream = Arrays.stream(dd);
		stream.map(str -> Integer.toString(str)).forEach(str -> {
			System.out.println(str);// 1 ,2 ,3
			System.out.println(str.getClass());// class java.lang.String
		});

		List<Emp> list = Arrays.asList(new Emp("a"), new Emp("b"), new Emp("c"));
		list.stream().map(emp -> emp.getName()).forEach(str -> {
			System.out.println(str);
		});

	}

	public static class Emp {
		private String name;

		public Emp() {
			super();
		}

		public Emp(String name) {
			super();
			this.name = name;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

	}
}

可以看到,我们把Integer,变成了String输出,把Emp对象里的name字符串,单独输出;现在,我们只看到了一个forEach的终端操作,后面,我们会看到,更多的终端操作,把map操作后,改变的对象类型,返回各种类型的集合,或者对数字类型的,返回求和,最大,最小等的操作;

 

3.flatMap操作,我们还是先看接口定义

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

这个接口,跟map一样,接收一个Fucntion的函数式接口,不同的是,Function接收的泛型参数,第二个参数是一个Stream流;方法,返回的也是泛型R,具体的作用是把两个流,变成一个流返回,下面,我们看一个案例,来详细解答,怎么把两个流的内容,变成一个流的内容

public class TestJava8 {
	public static void main(String[] args) {
		String[] strs = { "aaa", "bbb", "ccc" };
		Arrays.stream(strs).map(str -> str.split("")).forEach(System.out::println);// Ljava.lang.String;@53d8d10a
		Arrays.stream(strs).map(str -> str.split("")).flatMap(Arrays::stream).forEach(System.out::println);// aaabbbccc
		Arrays.stream(strs).map(str -> str.split("")).flatMap(str -> Arrays.stream(str)).forEach(System.out::println);// aaabbbccc
	}
}

 

首先,第一个输出语句里,我们看到,我们输出的对象,并不是想象中的具体的字符串,第二段代码,才输出的具体的字符串;

 

第一段输出代码里,我们先看map操作,通过上面对map的介绍,我们可以看到,map可以改变返回的Stream的泛型,str.split(“”),根据空字符串分隔,返回的类型是一个数组,返回的流也是Stream<String[]>,而不是Stream<String>;在第二段代码中,数组的流,经过map操作,返回Stream<String[]>后,再经过flatMap,把数组通过Arrays.stream变成一个新的流,再返回到原来的流里;这样,两个流就合并成一个流;第三段代码,是第二段代码的,另一种写法;

 

 

1.lambda表达式

《java8 Lambda表达式简介》

《java8 lambda表达式,方法的引用以及构造器的引用》

2.函数式接口

《java8 函数式接口简介》

《JAVA8 Function接口以及同类型的特化的接口》

《JAVA8 Consumer接口》

《JAVA8 Supplier接口》

《JAVA8 UnaryOperator接口》

《JAVA8 BiConsumer 接口》

3.stream接口操作

《java8 Stream接口简介》

《 java8 Stream-创建流的几种方式》

《JAVA8 stream接口 中间操作和终端操作》

《JAVA8 Stream接口,map操作,filter操作,flatMap操作》

《JAVA8 stream接口 distinct,sorted,peek,limit,skip》

《java8 stream接口 终端操作 forEachOrdered和forEach》

《java8 stream接口 终端操作 toArray操作》

《java8 stream接口 终端操作 min,max,findFirst,findAny操作》

《java8 stream接口终端操作 count,anyMatch,allMatch,noneMatch》

《java8 srteam接口终端操作reduce操作》

《java8 stream接口 终端操作 collect操作》

4.其他部分

《java8 Optional静态类简介,以及用法》

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135871.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python 学习笔记 变量 xxx XXX「建议收藏」

    Python 学习笔记 变量 xxx XXX「建议收藏」Python学习笔记变量xxxXXXname=”adalovelace”print(name.title())print(name.upper())print(name.lower())first_name=”ada”last_name=”lovelace”full_name=first_name+””+last_nameprint(full_name)print(“Hello,”+…

    2022年8月22日
    5
  • 3.Eclipse创建第一个Java项目[通俗易懂]

    3.Eclipse创建第一个Java项目[通俗易懂]1.在桌面上双击eclipse快捷键,打开软件,出现一个界面2.这个界面是选择eclipse的工作空间,简单来说就是选择Java项目放在磁盘上的哪个位置上,可以点击默认的,也可以自己创建新的文件夹,然后点击Launch3.在主页面上点击File-&gt;New-&gt;JavaProject创建Java新项目4.在弹出的窗口的Projectname位置处,输入自己项目的名称…

    2022年7月24日
    6
  • git在idea切换远程分支_python git切换分支

    git在idea切换远程分支_python git切换分支想切换到另一个分支的时候,在IDEA的右下角没找到对应的远程分支随即我来到这个地方:项目->git->Repository->pull选择我想要切换的分支原文链接:https://blog.csdn.net/u012898245/article/details/84876094感谢楼主整理提供!…

    2022年9月15日
    0
  • IDEA中git的使用[通俗易懂]

    IDEA中git的使用[通俗易懂]IDEA中git的使用

    2022年4月23日
    57
  • 腾讯 cmq_rabbitmq消息队列

    腾讯 cmq_rabbitmq消息队列环境架构图组件介绍组件监听端口CMP依赖VIP:准备工作3台8*16服务器安装文档:物料包(组件物料包和python脚本):https://cmq-1255613487.cos.ap-chengdu.myqcloud.com/install_cmq/CMQ-ALL.zip安装[192.168.1.66]前端组件:#安装#[root@node_66~]#lsCMQ-1.0.2-软件包.tar.gzmk…

    2022年10月24日
    0
  • Java教程,全套Java基础视频教程「建议收藏」

    Java教程,全套Java基础视频教程「建议收藏」深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗。为此我呕心沥血整理了这套Java教程,不管你是不懂电脑的小白,还是已经步入开发的大牛,这套路线路你都值得拥有,小白看上面的视频可以成功学会Java并且顺利工作,大神看了上面的资源肯定会谆谆乐道,教程的宗旨就是分享,专业,便利,让喜爱Java的人,都能平等的学习。首先建立好开发环境非常重要,工欲善其事,必先利其器。做任何开发…

    2022年6月9日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号