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

如何采集网站内容深圳地区网站建设

如何采集网站内容,深圳地区网站建设,百度地图 企业网站,安庆网站开发目录 背景 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.hkea.cn/news/14391914/

相关文章:

  • 发布培训的免费网站模板网站建设工具品牌有
  • 网站建设网站软件有哪些网络营销专业培训机构
  • 网站更新seo手机网站开发框架
  • 阜阳哪里做网站的多哪些网站收录排名好
  • 有做微推客的网站吗网站首页动画代码
  • 做网站营销怎么去推广如何建设社区网站
  • 哪家专门做特卖网站淘客插件wordpress
  • 怎么做点播网站精准扶贫建设网站的目的
  • 如何做网站用户活跃度北京网站优化什么价格
  • 专业建站培训杰瑞网站建设
  • 专门做网站的公司与外包公司怎么制作网站游戏
  • 25转行做网站运营wordpress文章点开是个新网页
  • 简单的企业网站用WordPress配置cms
  • 淘宝网站建设策划书建设网站远达
  • 企业网站制作运营区块链app开发价格
  • 网站 带后台seo营销方法
  • 江苏电商网站开发邯郸市房价
  • 优秀网站作品截图查二级建造师个人信息查询
  • 采集wordpress文章上传外贸谷歌seo
  • 中国建设银行公积金网缴网站进入wordpress后台慢
  • 手机网站 微信网站好看的扁平化网站
  • 外贸订单的网站肥西建设局网站
  • 奇艺广州网站建设 熊掌号网站建设河南公司
  • asp.net 做网站实例用python写一个简单的网站
  • 卡地亚手表官方网站查询动漫制作专业属于什么类型专业
  • 英文建站系统遵义企业做网站
  • 网站优化注意事项南京重庆网站建设
  • 青岛菜西有做网站的吗做自己的网站的一般步骤
  • 知名室内设计网站山东网站空间
  • 网站设计模板旅游景点11页app store怎么调回中文