1、使用类名引用成员方法
格式:类名::成员方法 例如:Student::show
1.1、练习:集合里面的一些字符串,要求变成大写后输出。
import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "aa", "bb", "cc", "dd");
list.stream().map(new Function<String, String>() {
@Override
public String apply(String s) {
return s.toUpperCase(); //返回大写形式
}
}).forEach(n -> System.out.println(n));
System.out.println("-----------------------------------");
//改成方法引用
list.stream().map(String::toUpperCase).forEach(n -> System.out.println(n));
}
}
使用这种方式的抽象方法参数详解:
①、第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法,在Stream流中,第一个参数一般表示流里面的每一个数据,假设流里面的数据是字符串,那么使用这种方式进行方法引用,只能引用String这个类中的方法。
②、第二个参数到最后一个参数:跟被引用方法的形参保持一致,如果没有第二个参数,说明被引用的方法需要是无参的成员方法。
2、引用数组的构造方法
格式:数据类型[]::new
细节:数组的类型需要跟流中的数据类型一致
练习:集合中存储一些整数,收集到数组中
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Function;
import java.util.function.IntFunction;
public class Test {
public static void main(String[] args) {
test02();
}
public static void test02() {
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list, 1, 2, 3, 4, 5);
Integer[] arr1 = list.stream().toArray(new IntFunction<Integer[]>() {
@Override
public Integer[] apply(int value) {
return new Integer[value];
}
});
System.out.println(Arrays.toString(arr1));
System.out.println("-----------------------------------");
//改成引用数组的构造方法
Integer[] arr2 = list.stream().toArray(Integer[]::new);
System.out.println(Arrays.toString(arr2));
}
}
标签:java,list,util,引用,new,import,方法,public
From: https://blog.51cto.com/u_15433911/7180092