首先,我们来看下lambda的两个实例,一个是用来演示简化内部类的用法,另一个则是演示遍历集合的用法
//1.简化内部类
//Java8之前新建一个线程
@Test
public void oldInteriorClass(){
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("这是老的内部类的写法");
}
}).start();
}
//java8写法 新建一个线程
@Test
public void newInteriorClass() {
new Thread(() -> System.out.println("这是用java8Lamabda表达式写的内部类")).start();
}
//Java8之前遍历集合
@Test
public void traverseCollections() {
List<String> list = Arrays.asList(new String[] {"e","f","a"});
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
//java8写法 遍历集合
@Test
public void newtraverseCollections() {
List<String> list = Arrays.asList(new String[] {"e","f","a"});
Collections.sort(list, (str1,str2) -> str1.compareTo(str2) );
list.forEach(ff -> System.out.println(ff));
}
下面我们来看lambda表达式语法
1.1.1lambda表达式的一般语法
(Type1 param1, Type2 param2, ..., TypeN paramN) -> { statment1; statment2; //............. return statmentM; }
这是lambda表达式的完全式语法,后面几种语法是对它的简化。
1.1.2单参数语法
param1 -> { statment1; statment2; //............. return statmentM; }
当lambda表达式的参数个数只有一个,可以省略小括号
例如:将列表中的字符串转换为全小写
@Test
public void xxx() {
List<String> list = Arrays.asList(new String[] {"E","F","A"});
Collections.sort(list, (str1,str2) -> str1.compareTo(str2) );
list.forEach(ff -> System.out.println(ff));
List<String> lowercaseNames1 = list.stream().map(name -> {return name.toLowerCase();}).collect(Collectors.toList());
lowercaseNames1.forEach(ff -> System.out.println(ff));
}
1.1.3单语句写法
param1 -> statment
当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号
例如:将列表中的字符串转换为全小写
List<String> proNames = Arrays.asList(new String[]{"Ni","Hao","Lambda"});
List<String> lowercaseNames2 = proNames.stream().map(name -> name.toLowerCase()).collect(Collectors.toList());
1.1.4方法引用写法
(方法引用和lambda一样是Java8新语言特性,后面会讲到)
Class or instance :: method
例如:将列表中的字符串转换为全小写
List<String> proNames = Arrays.asList(new String[]{"Ni","Hao","Lambda"});
List<String> lowercaseNames3 = proNames.stream().map(String::toLowerCase).collect(Collectors.toList());
参考文献:https://blog.csdn.net/bitcarmanlee/article/details/70195403