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

装饰网站建设套餐报价建网站用自己的主机做服务器

装饰网站建设套餐报价,建网站用自己的主机做服务器,网站icp备案新规,网页版梦幻西游伙伴推荐Java8中一个非常重要的特性就是Lambda表达式,我们可以把它看成是一种闭包,它允许把函数当做参数来使用,是面向函数式编程的思想,一定程度上可以使代码看起来更加简洁。 其实以上都不重要,重要的是能够提高我的开发效率…

Java8中一个非常重要的特性就是Lambda表达式,我们可以把它看成是一种闭包,它允许把函数当做参数来使用,是面向函数式编程的思想,一定程度上可以使代码看起来更加简洁。

其实以上都不重要,重要的是能够提高我的开发效率,为了工作效率避免无意义加班,使用Lambda表达式只能说好爽!一时用一时爽,一直用一直爽!但是学习可能很多人觉得很复杂于是放弃了,可读性确实很不好,我的建议是死记规则,学习常用的Lambda表达式就够了。因为,其他稀奇古怪的语法很可能被你老大看见了会请你喝茶,所以本篇博客就由浅入深介绍提高工作效率神器——Lambda常用表达式。

例子切入

比如创建一个线程并启动,一般我们这样写:

//匿名内部类写法
new Thread(new Runnable() {@Overridepublic void run() {System.out.println("内部类写法");}
}).start();

使用Lambda表达式可以这样写:

new Thread(() -> System.out.println("hello world")).start();

我知道你很急,但你先别急,后面我们详细介绍其用法。以上代码表明使用Lambda表达式写起来真的很爽,早写完早下班!如果你司是代码量绩效那别学了,先辞职再说![手动狗头]

使用场景

Lambda表达式的最最最常见的使用场景是 接口容器,凡是以后需要实现接口和操作容器都可以考虑使用Lambda表达式。实现接口需要注意,如果接口中仅有一个抽象方法需要实现可以使用Lambda表达式,否则有多个未实现的方法不能使用。上述例子也就是接口使用Lambda表达式的一种实现方式。下面分为接口和容器结合例子进行讲解。

接口

首先定义我们自己的接口,就是打印输入的字符串s,如下:

interface MyPrint{public void print(String s);
}

传统的实现方式就是需要实现MyPrint类然后重写print方法,这里就不再展示,我们直接使用Lambda表达式实现如下:

MyPrint myPrint = s -> System.out.println(s);
myPrint.print("hello world 1");

现在解释上述代码:等号左边是我们的接口类,使用多态的方式父类引用指向子类实现。那么右边就是我们对左边父类的实现。() -> {} 是Lambda的一个语法,()中的字符表示需要传入的参数,不需要写类型,使用占位符即可,如果()中没有参数表示该方法(指的是需要重写的方法)无参。{} 是方法体,具体的实现代码写在 {} 中。如果有多个参数可以写成 (a,b)->{return a+b} ,但是这还不够简介,记住:如果(a)只有一个参数那么不需要写 () 直接写 a,如果 {} 只有一行代码如果有return则不用写 return 也不用写 {},就写出一行需要返回的逻辑实现即可,例如上面代码实现标准写法是:

MyPrint myPrint = (s) -> {System.out.println(s)};

总结就是:能偷懒就偷懒,()->{} ,出错那你就按照标准的语法写,反正编译器会告诉你,如果只有一个参数可以省略() ,如果方法体只有一行代码可以省去return 单词和{} 。是不是超级简单,那么下面要升级难度了,
上述写法还可以进一步写成如下:

MyPrint myPrint = System.out::println; //等价于 s -> System.out.println(s);
myPrint.print("hello world 2");

这里就不得不介绍 :: 号的用法了,我们放到下一节讲解!

双冒号 :: 的用法

对于 :: 我的理解如下,假设有个Student类,其中有个方法 getName() ,那么student::getName 的意思就是 传入Student的对象student,调用它的getName()方法。等价于 (Student s)->{s.getName()} , 即

student::getName   等价于  (s)->{s.getName()} 或者  (Student s)->{s.getName()} 

所以,System.out::println 双冒号左边是对象,右边是该对象的方法。那有人会问那么参数s如何传的呢?我们再看,System.out::println; 等价于 s -> System.out.println(s); 其实println需要的是一个字符串参数,而MyPrint的print接口也是一个字符串参数,这种一对一的参数传递其实是隐式传递的,而且如果使用这种写法,参数必须是对应的!

以上情况是 对象::实例方法名; 那么也可以有 类名::静态方法名,例如 Integer::parseInt ,就是接受一个字符串,解析为整数。等价于 (String s)->{ Integer.parseInt(s)}。你会问你怎么知道参数是String,因为parseInt方法需要的就是String 啊。因此,如果你明白啦以上的规则,其实非常简单!现在还不适应没关系,通过下面的容器集合流处理案例,你会很明白!

Java 容器集合的Lambda用法

这里就非常简单了,基本都是Stream流的处理,配合Lambda表达式,简直写起来不要太爽了!这里还是以语法结合案例为驱动来讲解:

forEach 语法

使用它替代 for(int a : arr) ,简直太爽了,如下:

 // 使用Lambda表达式替代for循环List<Integer> arr = Arrays.asList(4, 1, 25);// forEach 表示从容器中依次取出每个元素进行{}中的操作arr.forEach(num->{int tmp = num+1;System.out.println(tmp);});
过滤器 stream().filter()

对容器中每个对象都进行过滤,如果filter( lambda条件)中的条件判断为true则保留,条件为false则丢弃。案例:提取容器中的奇数数字。

List<Integer> arr = Arrays.asList(4, 1, 25,3,6);
List<Integer> o = arr.stream().filter(num -> num % 2 == 1).collect(Collectors.toList());
System.out.println(o);

.collect(Collectors.toList() 表示重新转为List容器。

映射器 stream().map()

对容器中的每个对象都遍历,并对它在 map( lambda操作 ) 中进行一个Lambda表达式的操作,例子:每个数字变成自身的2倍(使用forEach也可以实现):

List<Integer> arr = Arrays.asList(4, 1, 25,3,6);
List<Integer> d = arr.stream().map(num -> 2 * num).collect(Collectors.toList());
System.out.println(d);
groupingBy 分组的使用

例子:将下面数组按照其字符串长度分组。

List<String> phones = Arrays.asList("huawei", "xiaomi", "vivo", "iphone","oppo", "laoluo", "oneplus");
Map<Integer, List<String>> map = phones.stream().collect(Collectors.groupingBy(String::length));
System.out.println(map);
综合练习题

最后来一道综合练习题,请先自己做,再看答案!
将一个字符串数组其中的字符串对应的奇数取出来,再转为整数类型,再排序
List list = Arrays.asList(“23”, “4”, “11”, “7”, “3”, “8”, “10”);
应该得到 [3, 7, 11, 23] .

List<Integer> res = list.stream().map(Integer::parseInt).filter(a -> a % 2 == 1).sorted().collect(Collectors.toList());
System.out.println(res);

以上就是 提高工作效率,但不能提高代码效率的常用Lambda表达式。对你有帮助的话帮忙一键三连,点赞-评论-关注!

http://www.sczhlp.com/news/146810/

相关文章:

  • a网站建设网站多大够用
  • 厦门市建设执业资格管理中心网站苏州企业网站制作多少钱
  • 住房和城建设网站首页策划公司职位
  • 黑龙江建设网官方网站特种作业做旅游网站挣钱吗
  • 网站开发技术的现状全屋定制营销方案
  • 购物网站建设代理商长沙网络推广只选智投未来
  • 专业的网站建设找聚爱国家市场监督管理局官网
  • 网站能不能用自己的电脑做服务器网站后台视频教程
  • 擦彩网站开发创建网站收费
  • 基本建筑网站北京网站seo设计
  • 建设网站时新闻资讯西安做网站朋朋
  • 科讯cms 网站地图建设局副局长
  • html5 素材网站大连网站排名公司
  • 怎么做网站的内部链接正规抖音代运营公司排名
  • Amazon Q Developer扩展安全漏洞分析与修复指南
  • 本科专业建设网站如何做网站呢
  • 网站制作收费明细表网站应用水印图片
  • 网站建好了 怎么建后台袜子网站建设规划书
  • 长春火车站电话上海网站建设q479185700棒
  • 免费ftp网站关于网站建设的知识
  • 在线做mtv网站wordpress完整虚拟资源下载类源码
  • 做网站的工资高新闻类网站怎么建设
  • 备案网站ip网站升级中
  • 手机ppt制作软件全模板免费手机网站优化怎么做
  • 专业网站建设首选公司网络规划设计师和hcie
  • 网站建设先进材料百度推广的优化软件
  • 天元建设集团有限公司张桂玉丑闻沈阳专业网站seo推广
  • 用node.js可以做网站吗软件开发工程师考试
  • 公司建网站多少钱一个月免费咨询图片素材
  • 网站如何做链接传奇服务器多少钱一个月