Java8_教程_01

2018-11-29  本文已影响0人  Kate_Blog

JAVA8 教程

默认方法

    interface Formula {
      double calculate(int a);
      default double sqrt(int a){
        return Math.sqrt(a);
      }
    }

使用:只需要实现抽象方法,默认方法可以被直接调用

    Formula formula = new Formula(){
      @Override
      public double calculate(int a){
        return sqrt(a * 100);
      }
    }
    formula.calculate(100) //100.0
    formula.sqrt(16) //4.0

Lambda expressions

使用旧版本Java来给一个列表排序:

    List<String> names = Arrays.asList("perter","anna","mike","xenia");
    Collections.sort(names,new Comparator<String>(){
      @Override
      public int compare(String a, String b) {
        return b.compareTo(a);
      }
    });

静态方法 Collections.sort 接收一个列表和一个comparator参数,
给列表里面的元素排序,经常需要通过创建匿名的comparator方式和传递列表参数的方式排序

1 lambda表达式

    Collections.sort(names,(String a, String b) -> {
      return b.compareTo(a);
    });
   Collections.sort(names,(String a, String b) -> b.compareTo(a));
    Collections.sort(names,(a,b) -> b.compareTo(a));

2 Functional Interfaces 函数接口

      @FunctionalInterface //添加第二个抽象方法,没有这个注解会报错
      interface Converter<F,T>{
        T convert(F from);
      }
  Converter<String,Integer> converter = (from) -> Integer.valueOf(from);
  Integer converted = converter.convert("123");
  System.out.println(converted);

3 Method and Constructor References

   Converter<String,Integer> converter1 = Integer::valueOf;
   Integer converted1 = converter1.convert("123");
   System.out.println(converted);
    class Something {
      String startWith(String s){
        return String.valueOf(s.charAt(0));
      }
    }
    //调用一个类的方法来实现函数接口Converter
    Something something = new Something();
    Converter<String,String> converter2 = something::startWith;
    String converted2 = converter2.convert("java");
    System.out.println(converted);

4 Lambda Scopes 作用域

    final int num = 1;
    Converter<Integer,String> stringConverter =
        (from) -> String.valueOf(from + num);
    stringConverter.convert(2); //3
    int num2 = 1;
    Converter<Integer,String> stringConverter1 =
        (from -> String.valueOf(from + num2))
    stringConverter.convert(2); //3
     int num2 = 1;
     Converter<Integer,String> stringConverter1 =
     (from -> String.valueOf(from + num2))
      num = 3;
class Person {
    String firstName;
    String lastName;
    Person(){}
    Person(String firstName, String lastName){
      this.firstName = firstName;
      this.lastName = lastName;
    }
  }

  interface PersonFactory<P extends Person>{
    P create(String firstName, String lastName);
  }
    PersonFactory<Person> personFactory = Person::new;
    Person person = personFactory.create("perter","parker");
上一篇 下一篇

猜你喜欢

热点阅读