java8新语法学习

来源:互联网 发布:周末网络国债基金公司 编辑:程序博客网 时间:2024/06/05 14:24

From: java8新语法学习

简单用代码学习下java8新增的语法.
详细强烈推荐阅读参考文章.

一. 扩展方法 default method

package com.qefee.dev.java;public class Java8DefaultMethod {    public static void main(String[] args) {        MsgPrinter msgPrinter = new MsgPrinter() {            @Override            public String getMsg() {                return "hello world";            }        };        msgPrinter.printMsg();    }}interface MsgPrinter {    String getMsg();    /**     * 扩展方法.     * 用default来定义, 有实现体.     * (本来接口是不允许有实现了的方法的)     */    public default void printMsg() {        String str = getMsg();        System.out.println(str);    }}

二. Lambda表达式

package com.qefee.dev.java;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;/** * Created by tj861 on 2016/4/11. */public class Java8Lambda {    public static void main(String[] args) {        List<Integer> list1 = Arrays.asList(1, 3, 2, 5, 4);        List<Integer> list2 = Arrays.asList(1, 3, 2, 5, 4);        /*         * 新的Lambda写法, 代码更加简洁. (对比下面的原来的写法)         */        Collections.sort(list1, (o1, o2) -> o1 - o2);        /*         * 原来的写法.         */        Collections.sort(list2, new Comparator<Integer>() {            @Override            public int compare(Integer o1, Integer o2) {                return o2 - o1;            }        });        System.out.println(list1);        System.out.println(list2);    }}

三. 函数式接口 Functional Interface

package com.qefee.dev.java;public class Java8FunctionalInterface {    public static void main(String[] args) {        /**         * 使用Lambda简写.         */        Java8FunctionalInterface.printSum((m, n) -> m + n, 2, 3);        Java8FunctionalInterface.printSum((m, n) -> m - n, 2, 3);        Java8FunctionalInterface.printSum((m, n) -> m * n, 2, 3);        Java8FunctionalInterface.printSum((m, n) -> m / n, 2, 3);    }    /**     * 方法接受一个函数式接口对象     * @param f 函数     * @param m 参数1     * @param n 参数2     */    private static void printSum(TwoVarFunctionalInterface f, int m, int n) {        System.out.println(f.foo(m,n));    }}/** * 二元接口. * 用FunctionalInterface标识函数式接口. * 函数式接口只能有一个抽象方法. */@FunctionalInterfaceinterface TwoVarFunctionalInterface {    int foo(int m, int n);}

四. 方法引用Method References

package com.qefee.dev.java;public class Java8MethodReferences {    public static void main(String[] args) {        /**         * 可以通过函数式接口来引用方法.         * 引用符号 ::         *         * 有几种引用方法.         * 具体请参考以下链接         * <a href='http://blog.csdn.net/kimylrong/article/details/47255123'>Java 8之方法引用(Method References)</a>         * <a href='http://blog.csdn.net/wwwsssaaaddd/article/details/37573517'>java8 - 方法引用(method referrance)</a>         *         * 1. 引用静态方法 ContainingClass::staticMethodName         * 2. 引用特定对象的实例方法 containingObject::instanceMethodName         * 3. 引用特定类型的任意对象的实例方法  ContainingType::methodName         * 4. 引用构造函数 ClassName::new         */        TwoVarFunctionalInterface1 f = Java8MethodReferences::staticAddMethod;        System.out.println(f.foo(2,3));    }    private static int staticAddMethod(int a, int b) {        return a + b;    }}/** * 二元接口. * 用FunctionalInterface标识函数式接口. * 函数式接口只能有一个方法. */@FunctionalInterfaceinterface TwoVarFunctionalInterface1 {    int foo(int m, int n);}

参考文章

  • Java 8简明教程
  • Java 8之方法引用(Method References)
  • java8 - 方法引用(method referrance)
  • 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
0 0
原创粉丝点击