Lambda表达式简析
Lambda表达式可以使代码更简洁、更灵活。使Java的语言表达能力得到了提升。
通过操作符" -> "
将Lambda表达式划分为两部分。
左侧:Lambda表达式的参数列表。对应接口中抽象方法的参数列表。
右侧:Lambda表达式中所需要执行的功能,即Lambda体。对应接口中抽象方法的实现。
四大内置函数接口:
**1.消费型接口 Comsumer **
void accept(T t)
有参,无返回值
import java.util.ArrayList;
import java.util.List;
/*
消费型接口: 有参, 无返回值 Consumer
*/
public class Demo001 {
public static void main(String[] args) {
//创建ArrayList集合
List<String> list=new ArrayList<>();
list.add("mike");
list.add("nice");
list.add("hello");
//forEach方法需要一个Consumer接口,因为Consumer接口里面的accept方法需要带一个参数
//将集合中每一个元素,一次给到accept方法中,由你决定,对现在拿到的每一个元素做什么操作
list.forEach((t)->{
System.out.println(t);
});
}
}
在本代码中,通过对list中的forEach()方法来验证Comsumer接口,实现对集合中元素的遍历。
**2.供给型接口 Supplier **
T get()
无参 带返回值
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
/*
供给型接口
*/
public class Demo002 {
public static void main(String[] args) {
List<Integer> list=getList(10,()->{return (int)(Math.random()*101);});
//forEach() Comsumer接口遍历
list.forEach((t)->{
System.out.println(t);
});
}
// 定义一个方法, 生成指定个数的, List集合, 里面存储的都是[0,100]随机整数
// 下一次 [0,200]
// count 集合大小
// sup 生成器
public static List<Integer> getList(int count, Supplier<Integer> sup){
List<Integer> list=new ArrayList<>();
for(int i=0;i<count;i++){
// 利用用户给的生成器 生成需要的数据
list.add(sup.get());
}
return list;
}
}
3.函数型接口 Function<T,R>
R apply(T t)
有参 有返回值
import java.util.function.Function;
/*
功能型接口
*/
public class Demo003 {
public static void main(String[] args) {
String word="ASDFGHJKL";
//将字符串前加空格
String s1=stringHandler(word,(s)->{return " "+ s + " ";});
System.out.println(s1);
//截取字符串中的最后两个字符
//substring()返回一个字符串,该字符串是此字符串的子字符串。 子字符串以指定索引处的字符开头,并扩展到该字符串的末尾。
String s2=stringHandler(word,(s)->{return s.substring(s.length()-2);});
System.out.println(s2);
}
// 要对字符串进行处理(+ - 替换) 处理之后,还是要得到一个字符串
public static String stringHandler(String str, Function<String,String> f){
//利用处理器进行处理
return f.apply(str);
}
}
4.断定型接口 Predicate
boolean test(T t)
有参 有返回值
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
/*
评审型接口|断定型接口 Predicate
*/
public class Demo004 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("aaaa");
list.add("bbbbbb");
list.add("ddddd");
list.add("asdfadf");
list.add("asdfadf");
// 挑选出字符个数大于5的元素
//Lambda表达式主要起到了传递代码串的作用,对关键代码进行了个性化处理
getSome(list,(s)->{ return s.length()>5;}).forEach((t)->{
System.out.println(t);
});
//挑选字符中含有a的字符
getSome(list,(s)->{return s.contains("a");}).forEach((t)->{;
System.out.println(t);});
}
// 将List<String>集合中的 满足条件的 元素提取出来
public static List<String> getSome(List<String> list, Predicate<String> p){
// 准备一个集合 存储满足条件的元素
List<String> newList=new ArrayList<>();
// s 是list中的每一个元素
list.forEach((s)->{
if(p.test(s)){
newList.add(s);
}
});
return newList;
}
}
Lambda表达式主要起到了传递代码串的作用,对关键代码进行了个性化处理