Java8技术总结

阅读数:3 评论数:0

跳转到新版页面

分类

python/Java

正文

Java简介

1、添加了函数式编程、Stream、全新的日期处理类

2、函数编程新加了一些概念:lambda表达式、函数式接口、函数引用、默认方法、Optional类(干掉空指针)等。

3、Stream中提供了一些流式处理集合的方法,并提供了一些归约、划分等类的方法。

4、日期中添加了ZoneDateTime、DataFormat等线程安全的方法类。

 

lambda简介

1、基本语法

(1)参数列表->表达式

(2)参数列表->{表达式}

需要注意的是lambda表达式默认隐含了return 关键字,在单个表达式中,我们无需再写return 关键字,也无需写花括号。

只有当表达式是一个集合的时候,才需要写花括号及return 关键字。

2、异常处理

将抛出的函数进行包装,使其不抛出异常。

public class Try {
   // 包装使其不抛出异常
   public static <T, R> Function<T, R> of(UncheckedFunction<T, R> mapper) {
      Objects.requireNonNull(mapper);
      return t -> {
         try {
            return mapper.apply(t);
         } catch (Exception e) {
            throw Exceptions.unchecked(e);
         }
      };
   }

   // 作为lambda的目标类型
   @FunctionalInterface
   public interface UncheckedFunction<T, R> {
      R apply(T t) throws Exception;
   }

}
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 0);
integers.forEach(Try.of(i -> System.out.println(50 / i)));

 

函数式接口

1、Java8函数式接口

// Function<T, R> -T作为输入,返回的R作为输出   
Function<String,String> fun = (x) -> {System.out.print(x+": ");return "Function";};  
System.out.println(fun.apply("hello world"));

//Predicate<T> -T作为输入,返回的boolean值作为输出
Predicate<String> pre = (x) ->{System.out.print(x);return false;};  
System.out.println(": "+pre.test("hello World"));

//Consumer<T> - T作为输入,执行某种动作但没有返回值   
Consumer<String> con = (x) -> {System.out.println(x);};  
con.accept("hello world");

//Supplier<T> - 没有任何输入,返回T   
Supplier<String> supp = () -> {return "Supplier";};  
System.out.println(supp.get());

//BinaryOperator<T> -两个T作为输入,返回一个T作为输出,对于“reduce”操作很有用   
BinaryOperator<String> bina = (x,y) ->{System.out.print(x+" "+y);return "BinaryOperator";};  
System.out.println(" "+bina.apply("hello ","world"));

2、自定义函数式

@FunctionalInterface