lambda的表达式必须能够符合接口中定义的抽象方法,从参数、返回值,到异常都必须匹配。
- lambda完整版是 (参数) ----> {代码块},其中()和{} 在特定场合下也可以省略
- lambda可以由返回值,使用return语句即可,当然
foreach
接口没有,所有lambda表达式也不能有 - lambda可以使用外部数据,看着和匿名内部类是一样的
- lambda 不使用外部数据的话:
- 静态方法可以使用
类名::方法名
- 实例方法可以使用
实例变量::方法名
package day19;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
public class IterateListLambdaAppMain {
public static void main(String[] args) {
List<String> myList = addElementToList(new ArrayList<>());
String outside = "outside string";
// for(String s: myList) {
// processString(outside + s);
// }
// 匿名内部类实现循环:
// myList.forEach(new Consumer<String>() {
// @Override
// public void accept(String s) {
// processString(outside + s);
// }
// });
// lambda的表达式必须能够符合接口中定义的抽象方法,从参数、返回值,到异常都必须匹配。
// 1. lambda完整版是 (参数) ----> {代码块}
// 2. lambda可以由返回值,使用return语句就可以,当然我们接口没有,所有lambda表达式也不能有
// 3. lambda可以使用外部数据,看着和匿名内部类是一样的
// 使用lambda表达式实现list内容的打印
// myList.forEach((s) -> {processString(outside + s);});
// 简化版,去掉参数的() 和 方法体的{}
//
// myList.forEach(s -> processString(outside + s));
//
//
//// 如果无外部变量可以使用类名::方法名的方式来实现
// myList.forEach(IterateListLambdaAppMain::processString);
//
//// 非静态方法,可以使用实例来调用
// IterateListLambdaAppMain inst = new IterateListLambdaAppMain();
// myList.forEach(inst::processStringInst);
// lambda允许一个指定参数类型里的一个方法作为方法的引用
// myList.forEach(String::toUpperCase);
// hashMap的用法
Map<String, String> myMap = new HashMap<>();
myMap.put("k1", "v1");
myMap.put("k2", "v2");
myMap.put("k3", "v3");
// myMap.forEach((k,v) -> processTwoStrings(k,v));
// 或者这种写法
myMap.forEach(IterateListLambdaAppMain::processTwoStrings);
}
public static List<String> addElementToList(List<String> list) {
for(int i = 0; i < 10; i++) {
list.add("str" + (i % 5));
}
return list;
}
private static void processString(String str) {
System.out.println(str);
}
private static void processTwoStrings(String str1, String str2) {
System.out.println("s1=" + str1 + ", s2=" + str2);
}
private void processStringInst(String str) {
System.out.println(str);
}
}
网友评论