java8 学习笔记

java8简单了解

今天熟悉了一下java8的简单写法,相对java7提供了更多简便的写法,抛去性能方面不说,确实能够减少代码的行数,函数式编程让编程变得更加优雅。学习更多的是参考了其他的教程,以下也仅仅是做了一个学习笔记。

特点

  • Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。

  • 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

  • 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法

  • Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中

  • Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。

  • Date Time API − 加强对日期与时间的处理。

  • 当然还有其他跟多的特点,没有接触也没做更多了解

代码演示

public class LambdaStudy {
public static void main(String[] args) {
    LambdaStudy lambdaStudy = new LambdaStudy();


    // 类型声明
    MathOpertion operation = (int a,int b) -> a+b;


    //不用类型声明
    MathOpertion subtraction = (a,b) -> a-b;

    //大括号中的返回语句
    MathOpertion multiplication = (int a,int b) -> {return  a*b; };

    // 没有大括号及返回语句

    MathOpertion division = (int a, int b) -> a/b;

    System.out.println("10 + 5 = " + lambdaStudy.operate(10,5,operation));
    System.out.println("10 - 5 = " + lambdaStudy.operate(10, 5, subtraction));
    System.out.println("10 x 5 = " + lambdaStudy.operate(10, 5, multiplication));
    System.out.println("10 / 5 = " + lambdaStudy.operate(10, 5, division));


    // 不用括号
    GreetingService greetingService = message ->
        System.out.println("Hello" + message);

    // 用括号
    GreetingService greetingService1 = (message) -> {
        System.out.println("Hello" + message);
    };


    greetingService.sayHell("Runoob");
    greetingService1.sayHell("Google");

    String[] players = {"Rafael Nadal", "Novak Djokovic",
            "Stanislas Wawrinka", "David Ferrer",
            "Roger Federer", "Andy Murray",
            "Tomas Berdych", "Juan Martin Del Potro",
            "Richard Gasquet", "John Isner"};

    Comparator<String> comparator = (String s1, String s2) -> (s1.compareTo(s2));
    Arrays.sort(players,comparator);


    List names = new ArrayList();

    names.add("Google");
    names.add("Runoob");
    names.add("Taobao");
    names.add("Baidu");
    names.add("Sina");

    // 方法引用
    names.forEach(System.out::println);

    //
    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);

    // Predicate<Integer> predicate = n -> true
    // n 是一个参数传递到 Predicate 接口的 test 方法
    // n 如果存在则 test 方法返回 true

    System.out.println("输出所有数据:");
    eval(list, n->true);

    System.out.println("输出所有偶数:");
    eval(list,n -> n%2 == 0);



}

public  static  void eval(List<Integer> list,Predicate<Integer> predicate){
    list.stream().filter(predicate).forEach(System.out::println);

}

interface MathOpertion{
    int operation(int a,int b);
}

interface  GreetingService{
    void sayHell(String message);
}

private  int operate(int a,int b,MathOpertion mathOpertion){
     return mathOpertion.operation(a,b);
}}

Optional类

	/**
	 * @author luoc
	 * @date 2018/11/27 0027
	* @Time 15:08
	*/
public class OptionalStudy {

public static void main(String[] args) {
    OptionalStudy optionalStudy = new OptionalStudy();


    Integer values1 = null;
    Integer values2 = new Integer(10);

    // Optional.ofNullable - 允许传递为null参数
    Optional<Integer> a  = Optional.ofNullable(values1);

    //Optioanl.of -  如果传递的参数是null 抛出异常 nullEx
    Optional<Integer> b = Optional.of(values2);
    System.out.println(optionalStudy.sum(a,b));


}

public Integer sum(Optional<Integer> a, Optional<Integer> b){
    // Optional.isPresent - 判断值是否存在
    System.out.println(a.isPresent());
    System.out.println(b.isPresent());

    // Optional.orElse - 如果值存在,返回它,否则返回默认值
    Integer value1 = a.orElse(new Integer(0));
    Integer values2 = b.get();
    return  value1 + values2;

}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值