屌丝就爱尝鲜头——java8再判断
这节,我们来通过具体的实例来看看Java8的具体用法。
首当其冲,就是lambda用法。
这里的案例,就是用lambda来实现runnable接口,我们知道以前用匿名内部类的方式来实现runnable接口,这种方法晦涩难懂,用lambda表达式实现以后,这样的代码清爽了不少。上两种对比的代码:
public static void main(String[] args) { new Runnable() {
public void run() {
System.out.println("这是匿名内部类实现的runnable接口");
}
}.run();
int i=0;
Runnable runnable=()->{
System.out.println("i="+i);
System.out.println("aaaaaaaaaaaaaa");
};
runnable.run();
}
通过上述代码了,我们可以明明白白的看到这回事,lambda表达式中能够访问非静态的局部变量,这样,我们程序员们的代码是不是少写了很多,层次结构明了了很多。
案例二,我们分别用匿名内部类和lambda表达式来实现接口中带参的方法,比较孰优孰劣。
我们这里做一个接口叫IAction,分别让其实现,上代码:
package test; public class TestInterface { public static void main(String[] args) {
IAction iAction=new IAction() { @Override
public void excute(String content) {
// TODO Auto-generated method stub
System.out.println(content);
}
};
iAction.excute("aaaa");
IAction iAction2=(String content)->{
System.out.println(content);
};
iAction2.excute("bbbb");
}
static interface IAction{
void excute(String content);
} }
根据上面的代码,我们得出来这样的总结:
①利用lambda表达式以后,代码编写的篇幅大量的减少。
②利用lambda表达式以后,不用显式进行方法名称的调用。
③利用lambda表达式以后,代码的层次感更加强烈明了。
而Stream接口类似于一个什么了,一个泛型接口,使用户联合lambda表达式使其对数据集的操作更加的方便。下面,我通过一个对list操作的例子,老看看stream接口确实是为为集合操作带来了不少的好处。首先来一个people的实体类:
static class People{
String name;
int age;
double height;
public People(String name, int age, double height) {
super();
this.name = name;
this.age = age;
this.height = height;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "People[ name="+name+",age="+age+",height="+height+"].";
} }
然后来一个创建list集合的方法,源代码如下:
static List<People> createPeople()
{
List<People> peoples=new ArrayList<People>();
People people=new People("郑飞", 34, 1.99);
peoples.add(people);
people=new People("刘飞", 29, 1.89);
peoples.add(people);
people=new People("马飞", 24, 1.79);
peoples.add(people);
people=new People("王菲", 19, 1.69);
peoples.add(people);
return peoples;
}
接着,来一个Stream接口,将其利用Foreach循环将其输出,源代码如下:
public static void main(String[] args) {
List<People> peoples= createPeople();
Stream<People> stream= peoples.stream();
stream.forEach((e)->{System.out.println(e.toString());});
}
运行结果如下:
可见,Stream接口作用有如下:
流可以是无限的、有状态的,可以是顺序的,也可以是并行的。在使用流的时候,你首先需要从一些来源中获取一个流,执行一个或者多个中间操作,然后执行一个最终操作。中间操作包括filter、map、flatMap、peel、distinct、sorted、limit和substream。终止操作包括forEach、toArray、reduce、collect、min、max、count、anyMatch、allMatch、noneMatch、findFirst和findAny。 java.util.stream.Collectors是一个非常有用的实用类。该类实现了很多归约操作,例如将流转换成集合和聚合元素。 使其对集合操作更加灵活。
说了这么多谓词操作,我这里用filter实例作为讲解。
再上述的代码中,加上短短的一句代码,就ko了。
stream=stream.filter(e->e.getAge()>20);
可见了,有了这些操作的方法以后,操作集合也不需要你写过多的代码,就像sql一样,利用命令式语言来处理集合操作了。
通过了,这些Java8的小案例,我们明白了,lambda表达式和Stream虽然是采用c2c(copy to C#)的方式,但是C#多年的经验确实告诉我们了,确实很好用,一切语言都是为了我们,使我们少写代码,提高相应的工作效率而奋斗。
屌丝就爱尝鲜头——java8再判断的更多相关文章
- 屌丝就爱尝鲜头——java8总结晒一晒
前两节讨论了那么多,这节就是两个议题,讨论了新增的日期的api,再说一说我的Java8的一些心得体会了. 首先,我们必须要搞清楚Java 8 为什么要增加新的日期的api,这是由于老的日期api非常的 ...
- 屌丝就爱尝鲜头——java8初体验
Java8已经推出,让我们看看他的魅力.让我们看看他改变较大的部分. 一.java8概述 Java8是由Oracle(甲骨文)公司与2014年3月27日正式推出的.Java8同时推出有3套语言系统,分 ...
- 微信小程序“满月”:尝鲜之后你还用过它吗?
距离 2017 年 1 月 9 日微信小程序上线,整整过去了一个月时间.和互联网时代每天出现的众多新鲜事物相似,小程序甫一诞生,立即占据了各大科技媒体网站头屏并引起社交圈的兴奋讨论.由于背靠微信,纷纷 ...
- Java 8特性尝鲜:新新IO
Java 8特性尝鲜:新新IO 在这个专题前面的文章中,我们已经看到,使用Java8的lambda表达式对现有的JDK1.2 I/O库的提升,主要是可以使用lambda表达式来构造java.io.Fi ...
- 【响应式】foundation栅格布局的“尝鲜”与“填坑”
提到响应式,就不得不提两个响应式框架--bootstrap和foundation.在标题上我已经说明白啦,今天给大家介绍的是foundation框架. 何为"尝鲜"?就是带大伙 ...
- Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例
前言:由于之前没有接触过Hibernate框架,但是最近看一些博客深深被它的"效率"所吸引,所以这就来跟大家一起就着一个简单的例子来尝尝Spring全家桶里自带的JPA的鲜 Spr ...
- 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅
本文由微信开发团队工程是由“oneliang”原创发表于WeMobileDev公众号,内容稍有改动. 1.引言 Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发( ...
- Istio 1.1尝鲜记
近几天Istio1.1的发布引起了技术界巨大的反响,为了让更多技术爱好者能够亲自体验Istio1.1,公司的技术大佬赶出了这篇尝鲜教程,其中包括环境.安装.可能遇到的问题及解决方式等,希望对大家有所帮 ...
- Leetcode多线程题库练习(新功能尝鲜)& 个人感悟
大家好, 我是方子龙.很久没有自己写文章了. 一面是因为工作上的需求开发任务比较重,下班回家基本上就躺床玩几把王者,度过闲暇时光. 二面是一有点时间就自己主动地去看书和学习,知道自己还缺少很多知识,由 ...
随机推荐
- 使用chrome控制台作为日志查看器
很多时候,我们需要查看日志的实时输出,这个时候往往只能选择控制台.我这里的日志框架是serilog,它有一个好处是控制台输出时可以高亮的形式显示其参数结构信息,如下图所示 但也存在许多不方便的地方: ...
- 读写分离,读写分离死锁解决方案,事务发布死锁解决方案,发布订阅死锁解决方案|事务(进程 ID *)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务
前言: 由于网站访问压力的问题,综合分析各种因素后结合实际情况,采用数据库读写分离模式来解决当前问题.实际方案中采用“事务发布”模式实现主数据库和只读数据库的同步,其中: 发布服务器1 ...
- CVPR 2017
https://www.leiphone.com/news/201707/5D5qSICrej6xIdzJ.html Densely Connected Convolutional Networks ...
- iOS 项目一直在后台执行
我后来是这么解决不知道行不行,能够长期的在后台执行 首先我在xx-info.plist 里的 "Required background modes" 里增加"App pr ...
- DirectX全屏游戏中弹出窗口(转)
一直有人问如何在DirectX全屏游戏中弹出窗口就象金山游侠一样.我答应过要给出原码,只是一直没有时间整理,不过现在总算是弄玩了.代码不长,大致作了些注释,但愿你能看懂:)按照我的说明一步步作应该就能 ...
- Apache Tomcat 9 Installation on Linux (RHEL and clones)
Apache Tomcat 9 is not available from the standard RHEL distributions, so this article provides info ...
- 删除 AP 发票相关脚本
/* Formatted on 2018/3/15 10:33:14 (QP5 v5.256.13226.35538) */ --发票 CREATE TABLE bak.ap_invoices_all ...
- netty 支持多种通讯协议
通讯协议,指的是把Netty通讯管道中的二进制流转换为对象.把对象转换成二进制流的过程.转换过程追根究底还是ChannelInboundHandler.ChannelOutboundHandler的实 ...
- 多个Jar的合并操作
同事要写Android平台下的打包工具,遇到需要将多个jar合并成一个jar的问题.这里列一下操作步骤: 1.将所有jar文件复制至某临时目录中,通过jar命令解压得到所有的.class文件 > ...
- 将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网
1.以管理员身份运行命令提示符:快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡:运行命令:netsh wlan set hostednetwork mode=allow ssid= ...