类名引用成员方法
String::substring
再次复习一下方法引用的规则:
1.需要有函数式接口
2.被引用的方法必须存在
3.被引用方法的形参,需要跟抽象方法的第二个形参到最后一个形参保持一致 返回值保持一致
被引用方法的功能需要满足当前的需求引用数组的构造方法:
格式 数据类型[]::new
例子:int[]::new
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.function.Function;
import java.util.function.IntFunction;
public class Main{
public static void main(String[] args){
/*
类名引用成员方法
String::substring
再次复习一下方法引用的规则:
1.需要有函数式接口
2.被引用的方法必须存在
3.被引用方法的形参,需要跟抽象方法的第二个形参到最后一个形参保持一致 返回值保持一致
4.被引用方法的功能需要满足当前的需求
*/
//创建集合对象
ArrayList<String> list = new ArrayList<>();
//添加数据
Collections.addAll(list,"aaa","bbb","ccc","ddd");
//变成大写后再进行输出 String->String
list.stream().map(new Function<String, String>() {
@Override
public String apply(String s){
return s.toUpperCase();
}
}).forEach(s->System.out.println(s));
//变成方法引用
list.stream().map(String::toUpperCase).forEach(s->System.out.println(s));
//这里就是在Map中 我们在String类中引用了toUpperCase的值
/*
引用数组的构造方法:
格式 数据类型[]::new
例子:int[]::new
*/
ArrayList<Integer> l = new ArrayList<>();
Collections.addAll(l,1,2,3,4,5,6,7,8,9,10);
Integer[] arr = l.stream().toArray(new IntFunction<Integer[]>() {
@Override
public Integer[] apply(int value) {
return new Integer[value];
}
});
for(Integer i:arr){
System.out.println(i);
}
//这样想太复杂了
Integer[] arr2 =l.stream().toArray(Integer[]::new);
for (Integer i:arr2){
System.out.println(i);
}
}
}