1.先看一个java8的代码 /** * 利用function将list集合中的每一个元素转换后形成新的集合返回 * * @param list 要转换的源集合 * @param function 转换元素的方式 * @param T 源集合的元素类型 * @param
1.先看一个java8的代码
/*** 利用function将list集合中的每一个元素转换后形成新的集合返回
*
* @param list 要转换的源集合
* @param function 转换元素的方式
* @param <T> 源集合的元素类型
* @param <R> 转换后的元素类型
* @return
*/
public static <T, R> List<R> convert(List<T> list, Function<T, R> function) {
List<R> result = new ArrayList<>();
list.forEach(t -> result.add(function.apply(t)));
return result;
}
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1000, 2000, 3000);
List<String> newList = CollectionUtil.test5(list, Integer::toHexString);
System.out.println(newList);
}
此时,一脸懵逼。现在想一下我们之前实现这个功能怎么写的呢 ?
test1方法
private static void tes1(List<Integer> list) {List<String> converts = new ArrayList<>();
for (Integer item : list) {
String hexString = Integer.toHexString(item);
converts.add(hexString);
}
}
可以看出来
Integer.toHexString(item); 这个方法是写死的,如果做别的处理的话,需要重新写,所以,需要改下,看test2方法
test2方法
private static <T, R> void tes2(List<T> list, Function<T, R> function) {List<R> converts = new ArrayList<>();
for (T item : list) {
R hexString = function.apply(item);
converts.add(hexString);
}
}
test3方法 简化代码
private static <T, R> void tes3(List<T> list, Function<T, R> function) {List<R> converts = new ArrayList<>();
for (T item : list) {
converts.add(function.apply(item));
}
}
test4方法 for循环改写成jdk8的
private static <T, R> void tes4(List<T> list, Function<T, R> function) {List<R> converts = new ArrayList<>();
list.forEach(i -> converts.add(function.apply(i)));
}
test5 添加返回值
private static <T, R> List<R> test5(List<T> list, Function<T, R> function) {List<R> result = new ArrayList<>();
list.forEach(i -> result.add(function.apply(i)));
return result;
}
到此,test5演变成了 conver的方法了。但是
main
public static void main(String[] args) {List<Integer> list = Arrays.asList(1000, 2000, 3000);
List<String> newList = CollectionUtil.test5(list, Integer::toHexString);
System.out.println(newList);
}
其中 List<String> newList = CollectionUtil.test5(list, Integer::toHexString);这个是什么鬼? 其实,main可以这样写:
public static void main(String[] args) {List<Integer> list = Arrays.asList(1000, 2000, 3000);
List<String> convert = CollectionUtil.test5(list, i -> Integer.toHexString(i));
//上面的Lambda表达式代码块中,只有对Integer.toHexString()方法的引用,没有其它代码
// ,因此我们可以直接把方法作为参数传递,由编译器帮我们处理,这就是静态方法引用:
List<String> newList = CollectionUtil.test5(list, Integer::toHexString);
System.out.println(newList);
}
这里,演变就ok了!!