一、匿名内部类lambda表达式
原始java写法
DataStream<Tuple2<String, Long>> dst1=ds.map(new MapFunction<Tuple2<String, Long>, Tuple2<String, Long>>() {
@Override
public Tuple2<String, Long> map(Tuple2<String, Long> l) throws Exception {
System.out.println(l);
return l;
}
});
lambda表达式写法
DataStream<Tuple2<String, Long>> dst=ds.map((l)->{
System.out.println(l);
return l;});
代码格式:map(a->b).return(Class.class)
a、当只有一个入参时可以不写(),当没有入参时用()表示;
b、当只有一行代码是可以不用{};
c、当返回数据类型明确时可以不使用return指定返回类型。
二、接口可以有实现方法,default和static方法
public interface DefalutTest {
static int a =5;
default void defaultMethod(){
System.out.println("DefalutTest defalut 方法");
}
int sub(int a,int b);
static void staticMethod() {
System.out.println("DefalutTest static 方法");
}
}
1、static方法不能被继承,也不能被实现类调用,只能用接口名调用;
2、default方法可以被子接口继承也可以被实现类调用;
3、default被继承时可以被重写;
4、该特性的使用:给Collection接口添加新方法forEach()。
三、函数式接口
只有一个抽象方法的接口,可以包含默认方法。保证接口是函数式接口可以添加@FunctionalInterface 注解。
@FunctionalInterface
interface GreetingService
{
void sayMessage(String message);
}
GreetingService greetService1 = message -> System.out.println("Hello " + message);
greetService1. sayMessage(“lambda”);
四、JVM新特性
使用Metaspace代替持久代,元空间不再占用堆空间
OutOfMemoryError:
1、PermGen space 老年代溢出,增加老年代大小
JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m"
Java1.8 使用-XX:MetaSpaceSize和-XX:MaxMetaspaceSize
2、Java heap space 增加堆内存初始大小
set JAVA_OPTS= -Xms256m -Xmx1024m
3、OutOfMemoryError:unable to create new native thread
五、集合类添加foreach方法,参数Consumer接口,接口中实现accept方法
items.forEach(item->{
if("C".equals(item)){
System.out.println(item);
}
});