• Lambda表达式


    一、Lambda表达式

    1)函数式接口

    函数式接口(Functional Interface)是只包含一个方法的抽象接口。

    比如Java标准库中的java.lang.Runnable,java.util.concurrent.Callable就是典型的函数式接口。

    在Java 8中通过@FunctionalInterface注解,将一个接口标注为函数式接口,该接口只能包含一个抽象方法。

    函数式接口是为Java 8中的lambda而设计的,lambda表达式的方法体其实就是函数接口的实现。简化匿名内部类

    2)lambda表达式

    “lambda表达式”是一段可以传递的代码,因为他可以被执行一次或多次。其语法结构如下:

    (parameters) -> expression 或者 (parameters) -> {statements;}

    括号里的参数可以省略其类型,编译器会根据上下文来推导参数的类型,你也可以显式地指定参数类型,如果没有参数,括号内可以为空。方法体,如果有多行功能语句用大括号括起来,如果只有一行功能语句则可以省略大括号。)

    例子:

    public class J8test {
     
            //根据名字长度倒序排序,原来要new一个匿名内部类来比较
        @Test
        public void test1() {
            List<String> names = Arrays.asList("lucy","Mia","Isabella","Jackson");
            names.sort(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    return o2.length()-o1.length();
                }
            });
            names.stream().forEach(str -> System.out.println(str));
        }
         
        //使用lambda表达式后
        @Test
        public void test2() {
            List<String> names = Arrays.asList("lucy","Mia","Isabella","Jackson");
            names.sort((s1,s2)->s2.length()-s1.length());
            names.stream().forEach(str -> System.out.println(str));
        }
    }
    public class J8test  {
         
        public static void main(String[] args) {
     
            //启动一个新线程
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for(int i=0;i<10;i++) {
                        System.out.println("111");
                    }
                     
                }
            }, "线程1").start();
             
            //用lambda表达式启动一个新线程
            new Thread(()-> {
                for(int i=0;i<10;i++) {
                    System.out.println("111");
                }
            }) .start();
        }
    }

    3)方法引用

    方法引用是lambda表达式的一种简写形式。 如果lambda表达式只是调用一个特定的已经存在的方法,则可以使用方法引用。

    使用"::"操作符将方法名和对象或类的名字分隔开来

    有四种情况:

    对象::实例方法、类::静态方法、类::实例方法、类::new

    public class J8test  {
         
        @Test
        public void test3() {
            List<String> names = Arrays.asList("lucy","Mia","Isa","Jackson");
            //names.sort((s1,s2)->s1.compareToIgnoreCase(s2));
            names.sort(String::compareToIgnoreCase);//等价上面一行代码
            names.stream().forEach(str -> System.out.println(str));
        }
         
    }
  • 相关阅读:
    Apache xmlrpc
    认识serialVersionUID
    解压gz文件
    List of HTTP header fields
    Hadoop的Python语言封装
    httpcore in httpcomponent
    python enumerate 用法
    Hadoop Streaming Made Simple using Joins and Keys with Python « All Things Hadoop
    移位操作
    Chunked transfer encoding
  • 原文地址:https://www.cnblogs.com/jnba/p/10563099.html
Copyright © 2020-2023  润新知