当前位置: 首页 > news >正文

做美食网站的目的意义湛江制作网站多少钱

做美食网站的目的意义,湛江制作网站多少钱,2022网页游戏排行榜,pos机WordPress主题目录 背景 Lambda表达式的用法 函数式接口 Lambda表达式的基本使用 语法精简 变量捕获 匿名内部类 匿名内部类中的变量捕获 Lambda的变量捕获 Lambda表达式在类集中的使用 Collection接口 List接口 Map接口 总结 背景 Lambda表达式是Java SE 8中的一个重要的新特性.…目录 背景 Lambda表达式的用法 函数式接口 Lambda表达式的基本使用 语法精简 变量捕获 匿名内部类 匿名内部类中的变量捕获 Lambda的变量捕获 Lambda表达式在类集中的使用 Collection接口 List接口 Map接口 总结 背景 Lambda表达式是Java SE 8中的一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口.lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块).Lambda表达式基于数学中的λ演算得名,也可以称为闭包. Lambda表达式的用法 基本语法:(parameters)-expression或(parameters)-{statements;} Lambda表达式由三个部分组成: 1.parameters:类似方法中的形参列表,这里的参数是函数式接口里的参数.这里的参数类型可以明确声明也可不声明而由JVM隐含的判断.另外当只有一个推断类型时可以省略掉圆括号. 2.-:可理解为被用于的意思 3.方法体:可以是表达式也可以代码块,是在函数式接口里方法的实现.代码块可返回一个值或什么都不返回,这里的代码块等同于方法中的方法体,如果是表达式,可以返回一个值或者什么都不返回. 举个栗子: //1.不需要参数,返回值为2 ()-2 //2.接收一个参数(数字类型),返回其两倍的值 x - 2 * x //3.接收两个参数(数字),并返回它们的和 (x, y) - x y //4.接收2个int型整数,返回它们的乘积 (int x, int y) - x * y //5.接收一个string对象,并在控制台打印,不返回任何值(看起来是返回void) (String s) - System.out.println(s) 函数式接口 要了解Lambda表达式,首先需要了解什么是函数式接口,函数接口定义:一个接口有且只有一个抽象方法. 注意: 1.如果一个接口有且只有一个抽象方法,那么该接口就是函数式接口 2.如果我们在某个接口上声明了FunctionalInterface注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的.所以,从某种意义上来说,只要你保证你的接口中只有一个抽象方法,你可以不加这个注解.加上就会自动进行检测的. 定义方式: FunctionalInterface interface NoParameterNoReturn {//注意:只能有一个方法void test(); } 但是这种方法也是可以的: FunctionalInterface interface NoParameterNoReturn {void test();default void test2() {System.out.println(JDK1.8新特性,default默认方法可以有具体的实现);} } Lambda表达式的基本使用 首先,我们事先准备好几个接口: //无返回值无参数 FunctionalInterface interface NoParameterNoReturn {void test(); }//无返回值一个参数 FunctionalInterface interface OneParameterNoReturn {void test(int a); }//无返回值多个参数 FunctionalInterface interface MoreParameterNoReturn {void test(int a, int b); }//有返回值无参数 FunctionalInterface interface NoParameterReturn {int test(); }//有返回值一个参数 FunctionalInterface interface OneParameterReturn {int test(int a); }//有返回值多参数 FunctionalInterface interface MoreParameterReturn {int test(int a, int b); } 我们在上面提到过,Lambda可以理解为:Lambda就是匿名内部类的简化,实际上是创建了一个类,实现了接口,重写了接口的方法. 没有使用lambda表达式时的调用方式: NoParameterNoReturn noParameterNoReturn new NoParameterNoReturn(){Overridepublic void test() {System.out.println(hello);} }; 具体使用见以下代码: public class TestDemo {public static void main(String[] args) {NoParameterNoReturn noParameterNoReturn () - {System.out.println(无参数无返回值);};noParameterNoReturn.test();OneParameterNoReturn oneParameterNoReturn (int a) - {System.out.println(一个参数一个返回值: a);};oneParameterNoReturn.test(10);MoreParameterNoReturn moreParameterNoReturn (int a, int b) - {System.out.println(多个参数无返回值: a b);};moreParameterNoReturn.test(20, 30);NoParameterReturn noParameterReturn () - {System.out.println(有返回值无参数! );return 40;};//接收函数的返回值int ret noParameterReturn.test();System.out.println(ret);OneParameterReturn oneParameterReturn (int a) - {System.out.println(有返回值且有一个参数);return a;};ret oneParameterReturn.test(50);System.out.println(ret);MoreParameterReturn moreParameterReturn (int a, int b) - {System.out.println(有返回值且有多个参数);return a b;};ret moreParameterReturn.test(70, 60);System.out.println(ret);} }语法精简 1.参数类型可以省略,如果需要省略,每个参数的类型都需要省略.  2.参数的小括号里面只有一个参数,那么小括号可以省略. 3.如果方法体中只有一句代码,那么大括号可以省略. 4.如果方法体中只有一条语句,且是return语句,那么大括号可以省略,且去掉return关键字. 示例代码: public static void main(String[] args) {MoreParameterNoReturn moreParameterNoReturn (a, b) - {System.out.println(无返回值多个参数,省略参数类型: a b);};moreParameterNoReturn.test(20, 30);OneParameterNoReturn oneParameterNoReturn a - {System.out.println(无参数一个返回值, 小括号可以省略: a);};oneParameterNoReturn.test(10);NoParameterNoReturn noParameterNoReturn () - System.out.println(无参数无返回值,方法体中只有一行代码);noParameterNoReturn.test();//方法体中只有一条语句,且是return语句NoParameterReturn noParameterReturn () - 40;int ret noParameterReturn.test();System.out.println(ret);} 变量捕获 Lambda表达式中存在标量捕获,了解变量捕获之后,我们才能更好地理解Lambda表达式的作用域. Java当中的匿名类中,会存在变量捕获. 匿名内部类 匿名内部类就是没有名字的内部类.我们这里只是为了说明变量捕获,所以,匿名内部类只要会使用即可,那么下面来简单看看匿名内部类的使用就好了. 举个简单的例子: class Test {public void func() {System.out.println(func());} }public class TestDemo {public static void main(String[] args) {Test t new Test() {Overridepublic void func() {System.out.println(我是匿名内部类,且重写了func这个方法! );}};t.func();} } 在上述代码当中的main函数当中,我们看到的就是一个匿名内部类的简单使用. 匿名内部类中的变量捕获 在匿名内部类中,在使用内外的变量时,有两个条件:(要么是常量,要么是未修改的变量)  来看一下代码: public class TestDemo1 {public static void main(String[] args) {int a 100;Test t1 new Test() {Overridepublic void func() {System.out.println(我是匿名内部类,且重写了func这个方法!);System.out.println(我是捕获到变量a a 我是一个常量, 或者是一个没有改变过值的变量! );}};t1.func();} }在上述代码当中变量a就是捕获的变量.这个变量要么是被final修饰,如果不是被final修饰的 你要保证在使用之前没有修改.如下代码就是错误的代码. public class TestDemo2 {public static void main(String[] args) {int a 100;Test t2 new Test() {Overridepublic void func() {a 99;System.out.println(我是匿名内部类,且重写了func这个方法!);System.out.println(我是捕获到变量a a 我是一个常量, 或者是一个没有改变过值的变量! );}};} } 该代码直接编译报错. Lambda的变量捕获 lambda其实就是可以认为是匿名内部类的实现 在lambda表达式中也可以进行变量的捕获,具体我们看一下代码. FunctionalInterface interface NoParameterNoReturn {void test(); }public class TestDemo3 {public static void main(String[] args) {int a 10;NoParameterNoReturn noParameterNoReturn () - {//a 99;errorSystem.out.println(捕获变量 a);};noParameterNoReturn.test();} }Lambda表达式在类集中的使用 为了能够让Lambda和java的集合类更好的一起使用,集合当中,也新增了部分接口,以便与Lambda表达式对接. 对应的接口新增的方法Collectionremovelf() spliterator() stream() parallelStream() forEach()ListreplaceAll() sort()Map getOrDefault() forEach() replaceAll() putlfAbsent() remove() replace() computeIfAbsent() computeIfPresent() compute() merge() 以上方法的作用可自行查看javaapi. Collection接口 forEach()方法演示 该方法在接口Iterable当中,原型如下: default void forEach(Consumer? super T action) {Objects.requireNonNull(action);for(T t : this) {action.accept(t);} } 该方法表示:对容器中的每个元素执行action指定动作. public class TestDemo4 {public static void main(String[] args) {ArrayListString list new ArrayList();list.add(Hello);list.add(bit);list.add(hello);list.add(lambda);list.forEach(new ConsumerString() {Overridepublic void accept(String s) {//简单遍历集合中元素System.out.println(s );}});} }输出结果: 我们可以修改为如下代码: public class TestDemo4 {public static void main(String[] args) {ArrayListString list new ArrayList();list.add(Hello);list.add(bit);list.add(hello);list.add(lambda);//表示调用一个,不带有参数的方法,其执行花括号内的语句,为原来的函数体内容.list.forEach(s - System.out.println(s));} }List接口 sort()方法的演示 sort()方法源码:该方法根据c指定的比较规则对容器元素进行排序. public void sort(Comparator? super E c) {final int expectedModCount modCount;Arrays.sort((E[]) elementData, 0, size, c);if(modCount ! expectedModCount) {throw new ConcurrentModificationExpection();}modCount; } 使用示例: public class TestDemo5 {public static void main(String[] args) {ArrayListString list new ArrayList();list.add(hello);list.add(bit);list.add(lambda);System.out.println(list);list.sort(new ComparatorString() {Overridepublic int compare(String o1, String o2) {//这里比较长度return o1.length() - o2.length();}});System.out.println(list);} }输出结果: 修改为lambda表达式: public class TestDemo5 {public static void main(String[] args) {ArrayListString list new ArrayList();list.add(hello);list.add(bit);list.add(lambda);System.out.println(list);//调用带有两个参数的方法,且返回长度的差值list.sort((str1, str2) - str1.length() - str2.length());System.out.println(list);} }Map接口 HashMap的forEach() 该方法的原型如下: default void forEach(BiConsumer? super K, ? super V action) {Objects.requireNonNull(action);for(Map.EntryK, V entry : entrySet()) {K k;V v;try {k entry.getKey();v entry.getValue();} catch {//this usually means the entry is no longer in the map.throw new ConcurrentModificationExpection(ise);}action.accept(k, v);} } 作用是对Map中的每个映射执行action指定操作. 代码示例: public class TestDemo6 {public static void main(String[] args) {HashMapInteger, String map new HashMap();map.put(1, hello);map.put(2, bit);map.put(3, hello);map.put(4, lambda);map.forEach(new BiConsumerInteger, String() {Overridepublic void accept(Integer integer, String s) {System.out.println(integer s);}});} }输出结果: 使用lambda表达式之后的代码: public class TestDemo6 {public static void main(String[] args) {HashMapInteger, String map new HashMap();map.put(1, hello);map.put(2, bit);map.put(3, hello);map.put(4, lambda);map.forEach((k, v) - System.out.println(k v));} }总结 lambda表达式的优点很明显,在代码层次上来说,使代码变得非常地简洁.缺点也不明显,代码不易读. 优点: 1.代码简洁,开发迅速 2.方便函数式编程 3.非常容易进行并行运算 4.Java引入了Lambda,改善了集合操作  缺点: 1.代码可读性变差 2.在非并行计算中,很多计算未有传统的for性能要高 3.不容易进行调试
http://www.laogonggong.com/news/111647.html

相关文章:

  • 成都网站制作维护广丰区建设局网站
  • 如何为网站做优化东莞设计公司网站
  • 免费做网站支持绑定做的丑的网站有哪些知乎
  • 嘉兴外贸网站建设杭州论坛网站建设
  • 阿里云怎么做淘宝客网站php开源网站 网上商城
  • 门户网站的发展趋势网页模板怎么设计
  • 辽阳市建设行业培训中心网站创建网站的基本步骤
  • 网站图片3d显示效果济南网站建设推荐q479185700上快
  • 网站全屏轮播代码养殖场网站源码
  • 提供网站建设价格电子商务网站建设与管理课程的意义
  • 网站设计素材免费下载100种找客户的方法
  • 企业网站怎么做才好深圳注册公司地址怎么解决
  • 做中英文网站的世界互联网公司排名
  • 很有风格的网站有哪些如何为网站建设内容
  • 淘宝店采用哪些方法做网站推广东莞房价2022最新价格
  • 安徽省安徽省建设工程信息网站重庆梁平网站建设哪家便宜
  • uc酷站中的美图网站优秀网站设计网站
  • 手术室专科建设网站免费云电脑
  • 广州网站建设有哪些公司景区宣传网站制作模板
  • 深圳商城网站设计WordPress商品相册
  • 空间网站大全建设部网站招标投标文件
  • 网站开发手机号能在页面上显示吗好吃易做的家常菜网站
  • 汕头h5模板建站新媒体营销心得体会
  • 网站首页qq在线咨询jswordpress商城模板下载
  • 网站建设公司调研汇报ppt邯郸网络企业版
  • 门户网站解决方案工业设计代做网站
  • 网站视频如何下载广告平台推广渠道
  • 静态网站作品行业协会网站建设的目的
  • 网站建设需要哪些功能网站关键词过多
  • 模板建站小程序采光板及采光瓦营销型网站建设