简介
当lambda表达式内部只调用一个方法的时候,在无需引入新的参数时,可以使用方法引用进行简化
详解各类方法引用
有以下代码,需实现将List中的所有字符串转为大写
List<String> stringList = new ArrayList<>();
stringList.add("a");
stringList.add("b");
stringList.add("c");
静态方法引用
public class StringUtils {
public static String upperCase(final String str) {
if (str == null) {
return null;
}
return str.toUpperCase();
}
}
List<String> upperCaseList = stringList.stream().map(StringUtils::upperCase)
.collect(Collectors.toList());
原lambda表达式
List<String> upperCaseList = stringList.stream().map(item -> StringUtils.upperCase(item))
.collect(Collectors.toList());
lambda表达式的参数作为静态方法的参数使用
特定对象实例方法引用
public class StringUtils {
public String upperCase(final String str) {
if (str == null) {
return null;
}
return str.toUpperCase();
}
}
StringUtils stringUtils = new StringUtils();
List<String> upperCaseList = stringList.stream().map(stringUtils::upperCase)
.collect(Collectors.toList());
原lambda表达式
StringUtils stringUtils = new StringUtils();
List<String> upperCaseList = stringList.stream().map(item -> stringUtils.upperCase(item))
.collect(Collectors.toList());
lambda表达式的参数作为特定对象实例方法的参数使用
特定类型任意对象实例方法引用
List<String> upperCaseList = stringList.stream().map(String::toUpperCase)
.collect(Collectors.toList());
原lambda表达式
List<String> upperCaseList = stringList.stream().map(item -> item.toUpperCase())
.collect(Collectors.toList());
lambda表达式的第一个参数作为特定类型的对象使用,后续参数作为实例方法的参数使用
构造方法引用
public class UpperString {
private String string;
public UpperString(String string) {
this.string = string.toUpperCase();
}
}
List<UpperString> upperCaseList = stringList.stream().map(UpperString::new)
.collect(Collectors.toList());
原lambda表达式
List<UpperString> upperCaseList = stringList.stream().map(item -> new UpperString(item))
.collect(Collectors.toList());
lambda表达式的参数作为构造方法的参数使用
PREVIOUSSpring Security获取当前登录用户信息