默认方法
简述:接口可以有这个方法,而且不需要非得去创建实现类去实现这个方法
JDK8之前如果有大量实现的接口有变动,那么实现类也会跟着变动,修改起来工作量大且麻烦,所以就加入了默认方法特性
public interface Test {
default String test();
}
lamda表达式
简述:Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
作用:使用 Lambda 表达式可以使代码变的更加简洁紧凑。
例如:
public class Lambda {
private static String test() {
return String;
}
public static void main(String[] args) {
new Thread(() -> Lambda::test);
}
}
注意:
不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误。
如果lambda中的逻辑比较复杂 建议使用方法引用
格式:
//类名或对象名::方法名
User::getUserName
//类的构造方法
User::new
常用函数式接口
Runnable r = () -> System.out.printf("say hello");//没有输入参数,也没有输出
Supplier<String> sp = () -> "hello";//只有输出消息,没有输入参数
Consumer<String> cp = r -> System.out.printf(r);//有一个输入参数,没有输出
Function<Integer, String> func = r -> String.valueOf(r);//有一个输入参数 有一个输出参数
BiFunction<Integer, Integer, String> biFunc = (a, b) -> String.valueOf(a + b);//有两个输入参数 有一个输出参数
BiConsumer<Integer, Integer> biCp = (a, b) -> System.out.printf(String.valueOf(a + b));//有两个输入参数 没有输出参数
Stream流
- 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
- 具有filter, map, reduce, find, match, sorted等操作。
- 具有中间操作终止操作 中间操作后可继续操作 终止操作后不可对流进行操作
例:大于十八岁的人的体重总和
List<User> list =
userList.stream()
.filter(b -> b.age>= 18)
.mapToInt(User::getWeight)
.sum();
List的removeIf方法
removeIf() 方法用于删除所有满足特定条件的数组元素。
例:删除集合中大于2的元素
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.removeIf(i -> i >= 2);
}