1、基本用法
匿名内部类
- java8之前
Thread t = new Thread(new Runnable() {
@Override
public void run() {
//do something
}
});
t.start();
- java8
Thread t = new Thread(() -> {
//do something
});
t.start();
赋值
- before
Runnable runnable = new Runnable() {
@Override
public void run() {
//do something
}
};
- now
Runnable runnable = () -> {
//do something
};
方法引用
- before
List<String> datas = new ArrayList<>();
datas.add("a");
datas.add("b");
for(String data:datas){
System.out.println(data);
}
注意
如果没有说明,下文若出现datas
变量都为上面的定义
- now
//原始的匿名内部类
datas.forEach(new Consumer<String>() {
@Override
public void accept(String data) {
System.out.println(data);
}
});
//采用表达式(方式1)
datas.forEach((data) -> {
System.out.println(data);
});
//采用表达式(方式1)
datas.forEach(data -> System.out.println(data));
/*
*如果像这个例子,代码只有一行,且参数是迭代的对象,那么可以试用
*方法引用过进一步减少代码
*/
datas.forEach(System.out::println);
2、常用接口用例
遍历List集合
datas.forEach(data -> System.out.println(data));
过滤List集合数据
List<String> result = datas.stream()
.filter(data -> data.startsWith("a"))//过滤,此处是Predicate接口的实现
.collect(Collectors.toList());
转换类型
List<List<String>> result = datas.stream()
.flatMap(data -> Stream.of(Collections.singletonList(data)))
.collect(Collectors.toList())
经过上面的代码我们就把List<String>
转换成了List<List<String>>
,外层List的泛型具体是什么是由Stream.of(Collections.singletonList(data))
这个方法的参数类型决定的。
以上三个是比较常用的函数式接口的操作,其主要都是Stream
这个接口在的方法,里面还定义了很多接口。有兴趣的读者可以自行研究。
求赞!求赞!求赞!
网友评论