java8新语法学习

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标识函数式接口.
 * 函数式接口只能有一个抽象方法.
 */
@FunctionalInterface
interface 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标识函数式接口.
 * 函数式接口只能有一个方法.
 */
@FunctionalInterface
interface TwoVarFunctionalInterface1 {
    int foo(int m, int n);
}

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值