java8 5种 新特性:
1、接口中可以写默认的实现方法
2、lambda表达式
3、函数式接口
4、方法与构造函数引用
5、Stream 接口
1、接口中可以写默认的实现方法
public interface Java8Interface {
String getAge();
/**
* 不需要子类去实现可以直接调用
* @return
*/
default String getName(){
return "我是接口方法";
}
/**
* 智能接口本身直接调用
* @return
*/
static String getSex(){
return "女";
}
}
Java8Bean 对象 implements Java8Interface
public class Java8Bean implements Java8Interface{
@Override
public String getAge() {
return "18";
}
}
使用:
public static void main(String[] args) {
Java8Bean bean = new Java8Bean();
System.out.println(bean.getName());
System.out.println(Java8Interface.getSex());
}
2、lambda表达式
public static void main(String[] args) {
Java8Bean bean = new Java8Bean();
System.out.println(bean.getName());
System.out.println(Java8Interface.getSex());
String age = new Java8Interface() {
@Override
public String getAge() {
return null;
}
}.getAge();
// 有返回值且只有一行的方法 可以不用写括号。
age = ((Java8Interface) () -> "张三").getAge();
AtomicInteger i = new AtomicInteger();
new Thread(() -> System.out.println("我是线程内方法="+(i.getAndIncrement()))).start();
//lambda 接口实现的循环。
Map<Integer,String> map = new HashMap<>();
map.put(1,"zf");
map.put(2,"sd");
map.put(3,"wg");
map.forEach(new BiConsumer<Integer, String>() {
@Override
public void accept(Integer k, String v) {
System.out.println(k+" -- "+v);
}
});
//变形如下 ↓↓↓↓↓↓↓↓↓↓↓
map.forEach((k, v) -> {
System.out.println(k+" -- "+v);
});
List<Map<Integer,String>> list = new ArrayList<>();
list.add(map);
list.add(map);
list.add(map);
list.sort((o1, o2) -> 1);
list.forEach((value)->{
System.out.println(value);
});
}
3、函数式接口
/**
* 用户规范 lambda接口的注解,防止写多个为实现方法,因为lambda 实现的接口只允许有一个 可被实现的方法。
*/
@FunctionalInterface
public interface Java8Interface {
String getAge();
/**
* 不需要子类去实现可以直接调用
* @return
*/
default String getName(){
return "我是接口方法";
}
/**
* 智能接口本身直接调用
* @return
*/
static String getSex(){
return "女";
}
}
4、Stream 接口
在这里插入代码片
5、方法与构造函数引用
public static void main(String[] args) {
// Function<R,T> R 方法传递参数类型 T 方法返回的类型
Function<String,Integer> fun = (str)->str.length();
System.out.println(fun.apply("aa"));
Function<JBean,String> jFun = (jbean)->jbean.getName();
System.out.println(jFun.apply(new JBean("zz",1)));
Function<JBean,String> jFun1 = JBean::getName;
System.out.println(jFun1.apply(new JBean("zz",1)));
getTableName(JBean::getName,"bbbb");
}
public static void getTableName(Function<JBean,String> function,String value){
String apply = function.apply(new JBean(value, 1));
System.out.println(apply);
}