日期还在用java.util.Date吗?
别用了,Date这个对象是可变的,不好用,这是硬伤。所以出来了LocalDate LocalTime LocalDateTime
Lambda表达式:Lambda表达式是对象,是一个函数式接口的实例
- 函数型编程
- 参数类型自动推断
- 代码量少,简洁
举个例子,来来来
起个线程
new Thread(()->{System.out.println("来看看我简单不?");}).start();
排个序
List<String> strs = Arrays.asList("hello","I am glad to see you")
Collections.asSort(strs,(a,b)->a.length-b.length);
什么时候可以用Lambda表达式呢?
任何有函数式接口的地方!!! 什么是函数式接口呢?只有一个抽象方法的接口是函数式接口。
自定义函数式接口:
@FunctionalInterface
public interface MyMapper{
int save(MyInfo myInfo);
}
jdk1.8前中的函数式接口:Runnable Callable Comparator
jdk1.8以后:java.util.function
Supplier:代表一个输出
Consumer:代表一个输入 BiConsumer两个输入
Function:一个输入一个输出 BiFunction 两个输入一个输出 输入和输出类型不同
UnaryOperater 一个输入一个输出 BinaryOperator 两个输入一个输出 输入和输出类型相同
BiFunction<String,String,Integer> f1 = (a,b)->{
return a.length()+b.length();
};
方法的引用:
- 静态方法的引用
Supplier<String> s = ()->LocalDateMain.get();
Supplier<String> s1 = LocalDateMain::get;
- 实例方法的引用
Supplier<String> instanceStr = ()->new LocalDateMain().put();
Supplier<String> instanceStr1 = new LocalDateMain()::put;
- 对象方法的引用
- 构造方法的引用
Stream API
stream分为源、中间操作、终止操作
中间操作:filter distinct sorted limit skip map/flatMap
终止操作:forEach 等
String[] arr = {"a","b","c","d"};
Stream<String> arr1 = Stream.of(arr);
List<String> list = Arrays.asList("a","b","c","d");
Stream<String> stream = list.stream();