网站运营经理岗位要求,成都网站优化方案,百度号码认证平台,佛山网页建站模板函数式编程
关注做什么#xff0c;不关心是怎么实现的。为了实现该思想#xff0c;java有了一种新的语法格式#xff0c;Lambda表达式。Lambda本质是匿名内部类对象#xff0c;是一个函数式接口。函数式接口表示接口内部只有一个抽象方法。使用该语法可以大大简化代码。
…函数式编程
关注做什么不关心是怎么实现的。为了实现该思想java有了一种新的语法格式Lambda表达式。Lambda本质是匿名内部类对象是一个函数式接口。函数式接口表示接口内部只有一个抽象方法。使用该语法可以大大简化代码。
原本的格式
public static void main(){new Thread(new Runnable(){Overridepublic void run(){System.out.println(线程任务);}}).start();
}Lambda表达式
new Thread(
() - System.out.println(线程任务); ).start();函数式接口
即Simple Abstract Methods接口只有一个抽象方法需要重写的接口。可以使用FunctionalInterface来验证接口是否是函数式接口。
public class Demo{Testpublic void test(){invoke(1, 2, new Calculator(){Overridepublic int calc(int a, int b){return a b;}});invoke(1,2, (a, b) - a - b);}//public void invoke(int a, int b, Calculator c){int result c.calc(a, b);System.out.println(result);}
}//函数式接口
public interface Calculator{public int calc(int a, int b);
}语法格式
Lambda操作符 -参数操作符左边是Lambda参数参数的类型可以省略如果只有一个参数小括号也可以省略Lambda体操作符右边如果只有一条语句大括号可以省略如果有返回值return也可以省略分号也可以省略。
消费型接口
java提供的函数式接口Consumer接口
Test
public void test(){ListString list new ArrayList();list.add(tom);list.add(jack);list.add(rose);list.add(jerry);//forEach()里面的Consumer对象是一个函数式接口list.forEach(s - System.out.println(s));
}Test
public void test(){MapString map new HashMap();map.add(tom, 1);map.add(jack, 2);map.add(rose, 3);map.add(jerry, 4);//forEach()里面的Consumer对象是一个函数式接口map.forEach((k, v) - System.out.println(k v));
}供给型接口
Test
public void test(){SupplierDouble supper new Supplier(){public Double get(){return Math.random();} };//lambdaSupplierDouble supplier () - Math.random();//----------应用--------------StreamDouble stream stream.generate(() - Math.random(););
}功能型接口
Test
public void test(){ListString list new ArrayList();list.add(tom);list.add(jack);list.add(rose);list.add(jerry);//替换所有元素//方法内部需要的是一个功能型函数apply()list.replaceAll(s - s.toUpperCase());//forEach()遍历list.forEach(s - System.out.println(s));
}判断型接口
Test
public void test(){ListString list new ArrayList();list.add(tom);list.add(jack);list.add(rose);list.add(jerry);list.removeIf(new PredicateString(){public boolean test(String s){return s.length() 4;}});//lambdalist.removeIf(s - s.length() 4);//forEach()里面的Consumer对象是一个函数式接口list.forEach(s - System.out.println(s));
}方法引用表达式
当Lambda符号左右两边的参数一致时可以简化为类名::方法名的形式。
构造器引用表达式
当表达式左右两边的参数一致时可以简化为类名::new的形式。