四大函数式接口
lambda表达式、链式编程、函数式接口、Stream流式计算
函数式接口:只有一个方法的接口
查看文档:
下面来一个一个查看
1.Function 函数式接口
只要是函数式接口都可以使用lambda表达式来简化
public class Demo01 {
public static void main(String[] args) {
//传入一个值,返回一个值
// Function function= new Function<String, String>() {
// @Override
// public String apply(String s) {
// return s;
// }
// };
//使用lambda表达式简化
Function<String,String> function=(s)->{ return s; };
System.out.println(function.apply("asd"));
}
}
2.Predicate 断言式接口
输入一个参数,返回一个Boolean类型的值
public class Demo02 {
public static void main(String[] args) {
// Predicate<String> predicate = new Predicate<String>() {
// @Override
// public boolean test(String s) {
// return s.isEmpty();
// }
// };
Predicate<String> predicate=(s)->{ return s.isEmpty(); };
System.out.println(predicate.test("hello"));
}
}
3.Supplier 供给型接口
没有参数,只有返回值
public class Demo03 {
public static void main(String[] args) {
// Supplier<String> stringSupplier = new Supplier<String>() {
// @Override
// public String get() {
// return "hello world";
// }
// };
Supplier<String> stringSupplier=()->{return "hello world";};
System.out.println(stringSupplier.get());
}
}
4.Consumer 消费型接口
只有输入,没有输出
public class Demo04 {
public static void main(String[] args) {
// Consumer<String> stringConsumer = new Consumer<String>() {
// @Override
// public void accept(String s) {
// System.out.println(s);
// }
// };
Consumer<String> stringConsumer=(s)->{ System.out.println(s); };
stringConsumer.accept("hello world");
}
}
流式接口
使用集合才存储数据
使用流来计算
package com.ycm.stream;
import java.util.Arrays;
import java.util.List;
/**
* 题目要求:一分钟内完成此题,只能用一行代码实现!
* 现在有5个用户!筛选:
* 1、ID 必须是偶数
* 2、年龄必须大于23岁
* 3、用户名转为大写字母
* 4、用户名字母倒着排序
* 5、只输出一个用户!
*/
public class Test {
public static void main(String[] args) {
User u1 = new User(1,"a",21);
User u2 = new User(2,"b",22);
User u3 = new User(3,"c",23);
User u4 = new User(4,"d",24);
User u5 = new User(6,"e",25);
// 集合就是存储
List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
list.stream().filter(user -> {return user.getId()%2==0;})
.filter(user -> {return user.getAge()>23;})
.map(user -> {return user.getName().toUpperCase();})
.sorted((UU1,uu2)->{return uu2.compareTo(UU1);})
.limit(1)
.forEach(System.out::println);
}
}