Stream流、方法引用
Stream流
Stream流定义
对数组、集合或其他进行流式处理的一个接口,是目前Lambda表达式的使用者之一。
Stream流的使用
public static void main(String[] args) {
List<Camel> stream01 = new ArrayList<Camel>() {
{
//元素序列-----翻译过来就是集合中的所有元素对象
add(new Camel("Elsdon", "Jaycob", "Java programmer", "male", 2000, 18));
add(new Camel("Tamsen", "Brittany", "Java programmer", "female", 2371, 55));
add(new Camel("Floyd", "Donny", "Java programmer", "male", 3322, 25));
add(new Camel("Sindy", "Jonie", "Java programmer", "female", 35020, 15));
add(new Camel("Vere", "Hervey", "Java programmer", "male", 2272, 25));
add(new Camel("Maude", "Jaimie", "Java programmer", "female", 2057, 87));
add(new Camel("Shawn", "Randall", "Java programmer", "male", 3120, 99));
add(new Camel("Jayden", "Corrina", "Java programmer", "female", 345, 25));
add(new Camel("Palmer", "Dene", "Java programmer", "male", 3375, 14));
add(new Camel("Addison", "Pam", "Java programmer", "female", 3426, 20));
}
};
List<Camel> stream02 = new ArrayList<Camel>() {
{
//元素序列-----翻译过来就是集合中的所有元素对象
add(new Camel("Elsdon", "Jaycob", "Java programmer", "male", 2000, 18));
add(new Camel("Tamsen", "Brittany", "Java programmer", "female", 2371, 55));
add(new Camel("Floyd", "Donny", "Java programmer", "male", 3322, 25));
add(new Camel("Sindy", "Jonie", "Java programmer", "female", 35020, 15));
add(new Camel("Vere", "Hervey", "Java programmer", "male", 2272, 25));
add(new Camel("Maude", "Jaimie", "Java programmer", "female", 2057, 87));
add(new Camel("Shawn", "Randall", "Java programmer", "male", 3120, 99));
add(new Camel("Jayden", "Corrina", "Java programmer", "female", 345, 25));
add(new Camel("Palmer", "Dene", "Java programmer", "male", 3375, 14));
add(new Camel("Addison", "Pam", "Java programmer", "female", 3426, 20));
}
};
List<String> listCollect = stream01.
//filter创建流对象
stream()
//filter进行过滤,获取年龄大于30岁的动物
.filter(e -> e.getAge() > 30).
//filter进行类型转换,将动物对象转为动物的所有名字
map(e -> e.getName()).
//filter进行终端操作,流转换,将流转换为List集合
collect(Collectors.toList());
long count = listCollect.
//filter创建流对象
stream().
//filter进行跳跃,跳过前两个元素
skip(2).
//filter对流进行截取,只取用前3个
limit(3).
//filter对流进行统计,统计其元素个数
count();
listCollect.
//filter创建流对象
stream().
//filter进行迭代,最后进行打印,这里迭代为内部迭代(他帮你实现迭代逻辑);iterator为外部迭代
forEach(System.out::println);
//将两个流对象进行拼接组合
Stream.concat(stream02.stream(),stream01.stream());
}
方法引用
方法引用定义
双冒号::为引用运算符,而它所在的表达式被称为方法引用。Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者,是Lambda表达式的升级者。
方法引用的使用
//函数式接口
public interface Printable {
void print(String message);
}
public static void main(String[] args) {
//使用方法引用 System.out 对象存在 println方法也存在
print("HelloWorld", System.out::println);
}
/**
* @author zhuyang
* @description 使用函数式接口作为方法的参数
* @date 2021-04-18 19:44
* @param message:
* @param printable:
*/
public static void print(String message,Printable printable){
printable.print(message);
}
Gitee地址
Stream流:https://gitee.com/zhuayng/foundation-study/tree/develop/JavaBasis/Other/src/main/java/com/yxkj/other/modular/lambda/stream
方法引用: https://gitee.com/zhuayng/foundation-study/tree/develop/JavaBasis/Other/src/main/java/com/yxkj/other/modular/lambda/quote
总结
匿名内部类和函数式接口为Lambda铺路,Stream流作为Lambda的现实使用者,方法引用则简化Lambda表达式,作为Lambda表达式的终极版本。
XFS