屌丝就爱尝鲜头——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再判断,布布扣,bubuko.com

时间: 2024-10-10 16:36:54

屌丝就爱尝鲜头——java8再判断的相关文章

屌丝就爱尝鲜头——java8总结晒一晒

前两节讨论了那么多,这节就是两个议题,讨论了新增的日期的api,再说一说我的Java8的一些心得体会了. 首先,我们必须要搞清楚Java 8 为什么要增加新的日期的api,这是由于老的日期api非常的繁琐,使用起来非常不方便,Java作者奉行这变者通不变者死的原则,于是增加了这些api.下面,我们总点介绍这几个类--LocalDate类.LocalTime类.LocalDateTime类.DateTimeFormatter类,zoneDate类.一个个来看: Ⅰ.LocalDate类--返回日期

屌丝就爱尝鲜头——java8初体验

Java8已经推出,让我们看看他的魅力.让我们看看他改变较大的部分. 一.java8概述 Java8是由Oracle(甲骨文)公司与2014年3月27日正式推出的.Java8同时推出有3套语言系统,分别是Java SE8.Java SE Emebbled 8.Java ME8. Java SE8较以往的系统增强的功能有: ①增强了对集合式操作语言--lambda表达式的支持,"Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演

【响应式】foundation栅格布局的“尝鲜”与“填坑”

提到响应式,就不得不提两个响应式框架--bootstrap和foundation.在标题上我已经说明白啦,今天给大家介绍的是foundation框架. 何为"尝鲜"?就是带大伙初步一下foundation的灵活和强大 何为"踩坑"?就是我把我使用的时候踩过的坑给标个记号,这样大伙用的时候就可以"绕道而行"啦! 没错今天我这篇文章讲的就是北方酱左手边的那个看起来温(diao)文(de)尔(yi)雅(bi)的山羊先生:foundation!: 文章主

luvit 初尝鲜

官网:http://luvit.io/ Luvit is an attempt to do something crazy by taking node.js' awesome architecture and dependencies and seeing how it fits in the Lua language. This project is still under heavy development, but it's showing promise. In initial ben

Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例

前言:由于之前没有接触过Hibernate框架,但是最近看一些博客深深被它的"效率"所吸引,所以这就来跟大家一起就着一个简单的例子来尝尝Spring全家桶里自带的JPA的鲜 Spring-DATA-JPA 简介 JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO

Istio 1.1尝鲜记

近几天Istio1.1的发布引起了技术界巨大的反响,为了让更多技术爱好者能够亲自体验Istio1.1,公司的技术大佬赶出了这篇尝鲜教程,其中包括环境.安装.可能遇到的问题及解决方式等,希望对大家有所帮助. 环境 已经安装了 Kubernetes 集群,有1个 master 和4个 node.操作系统都是 CentOS Linux 7. 下载 Istio 安装文件 curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.1.0 sh - ex

Cocos2d-x v3.0正式版尝鲜体验【3】 Label文本标签

Cocos2d-x在新版本中加入了新的Label API,和以往不同的是,2.x的版本是通过三个不同的类来创建不同的文本标签,而现在是模仿着精灵的创建方式,一个类创建不同形式的文本,不过核心内容还是差不多的. 这是新的Label类结构图 在2.x的系列中,有三种文本,分别是TTF,BMFont和Atlas.在3.0中,将TTF拆分成两种,下面就分别看一下这四种文本的创建. 1.Label::createWithTTF 这是需要使用ttf格式字体文件的创建方式 TTFConfig config("

微信小程序的原型设计尝鲜

"小程序"来了,大世界要变了?微信小程序可能是近期业绩最火的话题之一了. 这个根植于微信流量巨无霸的应用,将对应用市场.对微商.电商.对企业的开发成本.获客成本将产生深远影响?将制造出绕开Google Play和AppStore的另一大App体系?将实现"知人性"的PM张小龙先生的"用后即走"的轻量App之梦?将秒杀传统的App? 虽有海量追捧者趋之若鹜,但也有冷静人士淡定的白眼.但无论如何,腾讯这步棋子既然落在了棋盘上,绝不能悔棋,更不可能半途

二、大数据生态圈尝鲜

Title: 二.大数据生态圈尝鲜 Author: Martin Date: 2016-02-24 18:00 Summary: 先通过几张图对大数据的生态圈有个宏观的认知, 搞清楚有哪些知识点需要掌握, 这些知识点后面都会详细讲解. 技术生态圈: hadoop生态圈: spark生态圈: 企业生态圈: 来自为知笔记(Wiz)