zoukankan      html  css  js  c++  java
  • 屌丝就爱尝鲜头——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#多年的经验确实告诉我们了,确实很好用,一切语言都是为了我们,使我们少写代码,提高相应的工作效率而奋斗。

     

      

  • 相关阅读:
    数组塌陷现象
    深浅拷贝的区别
    冒泡排序,选择排序的应用
    JavaScript双重循环的嵌套
    Css Grid网格布局
    css3动画详细介绍
    Python tkinter Label Widget relief upload image
    XXXFD
    XXX1
    Python爬取一个简单网页的HTML代码
  • 原文地址:https://www.cnblogs.com/manuosex/p/3703377.html
Copyright © 2011-2022 走看看