当面试官让说几个java8新特性的时候了解的可能还能说两句,不了解的只会一脸懵逼,主要原因在于不常使用所以很难接触到近而了解它。
1.接口默认方法
通过default 关键字可以为接口中的方法提供默认实现(通常情况接口方法中只能有接口,不能实现):
public interface Java8NewFeature {
default int getNewNum(int num) {
return 2 * num;
}
}
public static void main(String[] args) {
Java8NewFeature java8Newfeature = new Java8NewFeature () {};
System.out.println("新特性,接口默认方法:"+java8Newfeature.getNewNum(4));
}
输出结果:
新特性,接口默认方法:8
2.lambda表达式
public interface TestForLambda{
void sendMessage();
}
public interface TestForLambda2{
String getMessage(String msg);
}
public static void main(String[] args){
TestForLambda testForLambda = ()-> {
System.out.println("简单实现了接口方法");
System.out.println("do something");
};
testForLambda.sendMessage();
TestForLambda2 testForLambda2 = (a)->"hello "+a;
System.out.println(testForLambda2.getMessage("javajov"));
}
3.Optional
用来处理空值的类,如果你使用过springboot的jpa 那么你肯定对Optional不陌生,通过ID从数据库查询记录的时候返回的就是Optional。如果你项目中使用过kotlin,我相信各位对它在空值变量的限制上一定映像深刻。可见现在对null的处理开始重视起来了。
public static void main(String[] args) {
System.out.println("=======测试有值的情况begin========");
Optional<String> ret = Optional.of("javajov");
ret.ifPresent(data -> System.out.println("有值的时候做点事情:" + data));
System.out.println("获取值1:" + ret.orElse("如果为空则返回else提供的内容"));
System.out.println("获取值2:" + ret.get());
System.out.println("=======测试有值的情况end========");
System.out.println("=======测试NULL的情况begin========");
String bean = null;
Optional<String> ret2 = Optional.ofNullable(bean);
ret2.ifPresent(data -> System.out.println("有值的时候做点事情:" + data));
System.out.println("获取值1:" + ret2.orElse("如果为空则返回else提供的内容"));
System.out.println("获取值2:" + ret2.get());
System.out.println("=======测试NULL的情况end========");
}
输出
=======测试有值的情况begin========
有值的时候做点事情:javajov
获取值1:javajov
获取值2:javajov
=======测试有值的情况end========
=======测试NULL的情况begin========
4.stream
它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("cc");
list.add("bb");
list.add("dd");
list.add("aa");
list.add("111");
list.add("222");
list.add("333");
//filter过滤,假如list里面存放的是实体类,使用filter可以按照你想要的方式进行过滤
List<String> newlist = list.stream().filter(bean -> bean.length() == 3).collect(Collectors.toList());
System.out.println("filter过滤之后:");
newlist.forEach(bean -> System.out.print(bean + ","));
System.out.println();
System.out.println("list 原来的内容并不会变化如下:");
list.forEach(bean -> System.out.print(bean + ","));
System.out.println();
//使用sorted进行排序
List<String> sortedList = list.stream().sorted((a, b) -> a.compareTo(b)).collect(Collectors.toList());
System.out.println("sorted排序之后:");
sortedList.forEach(bean -> System.out.print(bean + ","));
System.out.println();
System.out.println("list 原来的内容并不会变化如下:");
list.forEach(bean -> System.out.print(bean + ","));
System.out.println();
//使用map进行转换
List<String> mapList = list.stream().map(bean -> bean.toUpperCase()+"hello").collect(Collectors.toList());
System.out.println("map转换之后:");
mapList.forEach(bean -> System.out.print(bean + ","));
System.out.println();
System.out.println("list 原来的内容并不会变化如下:");
list.forEach(bean -> System.out.print(bean + ","));
System.out.println();
}
输出:
filter过滤之后:
111,222,333,
list 原来的内容并不会变化如下:
cc,bb,dd,aa,111,222,333,
sorted排序之后:
111,222,333,aa,bb,cc,dd,
list 原来的内容并不会变化如下:
cc,bb,dd,aa,111,222,333,
map转换之后:
CChello,BBhello,DDhello,AAhello,111hello,222hello,333hello,
list 原来的内容并不会变化如下:
cc,bb,dd,aa,111,222,333,