1.函数式接口:只用一个方法的接口
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
2、lambda表达式:只要是函数型接口 可以 用 lambda表达式简化
// Function<String,String> function = new Function<String,String>() {
// @Override
// public String apply(String str) {
// return str;
// }
// };
Function<String,String> function = str->{return str;};
3.stream流式计算
java8的流式处理极大的简化了对于集合的操作,实际上不光是集合,包括数组、文件等,只要是可以转换成流,我们都可以借助流式处理
4.一个小例子(题目要求:一分钟内完成此题,只能用一行代码实现!)
利用 lambda表达式、链式编程、函数式接口、Stream流式计算实现
/**
* 现在有5个用户!筛选:
* 1、ID 必须是偶数
* 2、年龄必须大于23岁
* 3、用户名转为大写字母
* 4、用户名字母倒着排序
* 5、只输出一个用户!
*/
public class Test {
public static void main(String[] args) {
com.kuang.stream.User u1 = new com.kuang.stream.User(1,"a",21);
com.kuang.stream.User u2 = new com.kuang.stream.User(2,"b",22);
com.kuang.stream.User u3 = new com.kuang.stream.User(3,"c",23);
com.kuang.stream.User u4 = new com.kuang.stream.User(4,"d",24);
com.kuang.stream.User u5 = new com.kuang.stream.User(6,"e",25);
// 集合就是存储
List<com.kuang.stream.User> list = Arrays.asList(u1, u2, u3, u4, u5);
// 计算交给Stream流
list.stream()
.filter(u->{return u.getId()%2==0;})
.filter(u->{return u.getAge()>23;})
.map(u->{return u.getName().toUpperCase();})
.sorted((uu1,uu2)->{return uu2.compareTo(uu1);})
.limit(1)
.forEach(System.out::println);
}
}