博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
屌丝就爱尝鲜头——java8再判断
阅读量:7128 次
发布时间:2019-06-28

本文共 3313 字,大约阅读时间需要 11 分钟。

  这节,我们来通过具体的实例来看看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
createPeople() { List
peoples=new ArrayList
(); 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
peoples= createPeople(); Stream
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#多年的经验确实告诉我们了,确实很好用,一切语言都是为了我们,使我们少写代码,提高相应的工作效率而奋斗。

 

 

  

转载地址:http://rvxel.baihongyu.com/

你可能感兴趣的文章
Android开发套路收集整理与讨论
查看>>
代码规范的重要性,我已经放弃治疗
查看>>
笨办法学C 练习30:自动化测试
查看>>
mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK
查看>>
[vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件
查看>>
JS 设计模式二(封装)
查看>>
JavaScript “跑马灯”抽奖活动代码解析与优化(一)
查看>>
为什么我们选择 segmentfault 写作?
查看>>
多模型融合推荐算法在达观数据的运用
查看>>
JDK 11 马上就要来了!JDK 12 还会远吗?
查看>>
Kali Linux 2019.1 发布,Metasploit 更新到 5.0 版本
查看>>
【mysql的设计与优化专题(1)】ER图,数据建模与数据字典
查看>>
Jibo’s Name: How did we pick it?
查看>>
device's media capture mechanism,利用input:file调用设备的照相机/相册、摄像机、录音机...
查看>>
BroadLink:三款新品力求无障碍人机交互,三大平台分三期对外开放 ...
查看>>
掌门1对1获3.5亿美元E-1轮融资,华人文化产业基金、中金甲子基金等投资 ...
查看>>
Unity中的通用对象池
查看>>
ORA-00600: internal error code, arguments: [16703], [1403], [28], [...
查看>>
忆芯科技发布新一代国产主控芯片STAR1000P!4月完成量产版本 ...
查看>>
如何用条码标签打印软件实现商品价签制定会员价 ...
查看>>