函数式接口和流式计算
目录
函数式接口 #
新时代的程序员必会四大技能:lambda表达式、链式编程、函数式接口、Stream流式计算
函数式接口:只有一个方法的接口,比如:
好处:简化编程模型,在新版本的框架底层中大量应用。
查看 JDK8以上的API文档 java.utils.function
中可以发现四大原生的函数式接口:
Function函数型接口 #
参数是 T,返回值是 R
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> function = (str) -> str;
System.out.println(function.apply("aaaaaaaaaa"));
}
}
Predicate断定型接口 #
参数是 T,返回值是 boolean
import java.util.function.Predicate;
public class Demo2 {
public static void main(String[] args) {
Predicate<String> predicate = (str) -> {return str.isEmpty();};
// false
System.out.println(predicate.test("aaa"));
// true
System.out.println(predicate.test(""));
}
}
Supplier供给型接口 #
没有参数,只有返回值
import java.util.function.Supplier;
public class Demo3 {java
public static void main(String[] args) {
Supplier<String> supplier = ()->{return "1024";};
System.out.println(supplier.get());
}
}
Consumer消费型接口 #
只有参数,没有返回值
import java.util.function.Consumer;
public class Demo4 {
public static void main(String[] args) {
Consumer<String> consumer = (str)->{
System.out.println(str);
};
consumer.accept("abc");
}
}
流式计算 #
与流计算有关的API在 java.utils.stream
里面,所有接口如下:
/**
* Description:
* 题目要求: 用一行代码实现
* 1. Id 必须是偶数
* 2.年龄必须大于23
* 3. 用户名转为大写
* 4. 用户名倒序
* 5. 只能输出一个用户
**/
public class Main{
public static void main(String[] args) {
User u1 = new User(1, "a", 23);
User u2 = new User(2, "b", 23);
User u3 = new User(3, "c", 23);
User u4 = new User(6, "d", 24);
User u5 = new User(4, "e", 25);
List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
// lambda、链式编程、函数式接口、流式计算
list.stream()
.filter(user -> {return user.getId()%2 == 0;})
.filter(user -> {return user.getAge() > 23;})
.map(user -> {return user.getName().toUpperCase();})
.sorted((user1, user2) -> {return user2.compareTo(user1);})
.limit(1)
.forEach(System.out::println);
}
}