先来复习一下些函数式接口,和怎么用lambda
@FunctionalInterface
interface NoParameterNoReturn{
void func();
//default void func2(){}
}
@FunctionalInterface
interface OneParameterNoReturn{
void test(int a);
}
@FunctionalInterface
interface MoreParameterNoReturn{
void test(int a,int b);
}
@FunctionalInterface
interface OneParameterReturn{
int test(int a);
}
@FunctionalInterface
interface MoreParameterreturn{
int test(int a , int b);
}
class Demo1{
public void func(){
System.out.println("父类");
}
public void func2(){
System.out.println("父类2");
}
}
public class LambdaDemo {
public static void main(String[] args) {
int a = 100;
new Demo1(){
@Override
public void func(){
System.out.println("重写的父类func方法");
System.out.println(a);
}
// 测试是否可以干其它的事情
void func3(){
System.out.println("重写的父类2号方法");
}
}.func3();
}
public static void main1(String[] args) {
NoParameterNoReturn noParameterNoReturn = () ->{
System.out.println("无参无返回");
};
noParameterNoReturn.func();
OneParameterNoReturn oneParameterNoReturn = (a) ->{ // 参数a 可以去掉圆括号
System.out.println("一个参数,无返回");
};
oneParameterNoReturn.test(10);
OneParameterReturn oneParameterReturn = (int a) ->{ // int 可以省略
return a;
};
System.out.println(10);
// 花括号里有一条语句可以省略为
MoreParameterreturn moreParameterreturn = (a,b) -> a+b;
}
}
函数式接口指的是,只有一个抽象方法,也可以加一个default修饰的具体函数,一般只写一个抽象方法,最后加上注解@FunctionalInterface,这个注解既是注释,又是约束条件
在list中的应用
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("你好呀");
list.add("小王");
/*list.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
});*/
list.sort((str1,str2) ->str1.length()-str2.length());
// list.forEach(new Consumer<String>() {
// @Override
// public void accept(String str) {
// // 遍历集合中的元素
// System.out.print(str + "");
// }
// });
list.forEach((str) ->{
System.out.print(str + "");
});
}
map在map中的应用
public static void main(String[] args) {
HashMap<Integer,String > map = new HashMap<>();
map.put(1,"小王");
map.put(2,"小赵");
map.put(3,"小孙");
/*map.forEach(new BiConsumer<Integer, String>() {
@Override
public void accept(Integer integer, String s) {
System.out.println(integer + "=" + "s");
}
});*/
map.forEach((K,V) -> {
System.out.println(K + "=" + V);
});
}