【0002】对foreach(List,Map)循环和lambda结合表达式简化foreach代码的理解?

【0002】对foreach(List,Map)循环和lambda结合表达式简化foreach代码的理解?


今天看了一段代码,用到了list.foreach循环和lambda结合,有些蒙圈,就翻看了以前的笔记和查了写资料来回忆回忆,写个博客总结一下,嘿嘿!


前言:

首先:应该了解java中foreach有啥功能类,当然都知道用来做循环输出操作的,减少代码量,再加上lambda的表达式,减少更多代码量,而我想知道的是其底层实现原理,目前我知道的也就List,Map集合可以使用,js也有,JDK8版本之后引入的!

格式如下:
(List,Map)集合.foreach(数据类型 元素变量:遍历对象){
引用元素变量的语句;
}
例如:list.foreach(String s){
System.out.println(s);
}

二、学习步骤(例:ArrayList)

首先了解代码书写和结果:

代码如下(示例):

//不要忘记导入import java.util.ArrayList;
           //import java.util.List;
 List<String> list =new ArrayList<>();
        list.add("赵敏");
        list.add("小昭");
        list.add("殷素素");
        list.add("周芷若");
        list.foreach(String s){//最基础的代码,s是变量名,你想怎么起名就怎么起名
        System.out.println(s);
 }
        System.out.println("---------------------");
        list.forEach(s->{System.out.println(s)});//运用lambda表达式简化代码
        System.out.println("---------------------");

输出结果:

赵敏
小昭
殷素素
周芷若
---------------------
赵敏
小昭
殷素素
周芷若
---------------------

2.其次了解foreach的实现原理(查看API文档):


如何获取信息:


1.首先你需要打开API文档,在搜索框输入ArrayList(我使用的是18版本),这里是下载地址:(路径是18版本)https://www.oracle.com/java/technologies/javase-jdk18-doc-downloads.html
当然也有官网在线文档查看:
https://www.oracle.com/cn/java/technologies/java-se-api-doc.html

2.找到方法foreach,看不懂英文可以右击翻译成中文,会出现下面图片的信息,若是详细了解foreach的功能,点击foreach查看,或者在打开idea选中代码区的foreach(ctrl+单击)查看foreach的函数功能,更全面的了解foreach的底层代码:如下图:


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


信息解释:


对foreach底层代码的理解:


1.从idea查看的底层代码中发现forEach()方法是Iterable接口中的一个函数方法;
2.forEach()方法里面有个Consumer类型,它是Java8新增的一个消费型函数式接口,如果不了解Consumer消费者类型,继续右击查看Consume的底层代码(哪里不懂点哪里),如下图:
3.其代码含义大致为:Consumer接口中只有一个抽象方法 accept (接受一个输入参数并且无返回)方法,用来实现作为一个消费者输出的信息功能;
4.到此我们了解了参数Consumer<? super T> action,然后里面的是代码中有个增强for循环,来输出循环信息即是foreach的功能。


在这里插入图片描述


对Lambda表达式理解(lambda 表达式原理和其规则):


1.Lambda 是一个匿名函数,是一段可以传递信息的代码模式,我们要了解的是Lambda对接口的实现操作,该接口需满足只有一个抽象方法的接口(函数式接口),就像上文中的Consumer接口;
2.对于lambda 表达式实现的方法引用的返回值都是 Consumer 类型,所以,他们能够作为 forEach 方法的参数,并且输出一个值;
3.简化规则:若只有一个参数,小括号可以省略不写,若一个引用元素变量的语句,大括号不写。
例如:

list.forEach((s)->{
System.out.println(s)
}
-->
list.forEach(s->System.out.println(s))//更加简化代码


3.具体的lambda的表达式的理解和规则。可以学习一下这篇博客的分享:

https://blog.csdn.net/chenshun123/article/details/78122467


再补充一下map的foreach实现功能:


map集合有自己的foreach()方法,参数类型也不同(函数接口不一样),但了解原理和上述方法一样:
简述原理:函数式接口BiConsumer <? super K , ? super V >(接受两个输入参数且不返回结果的操作),接着里面的是代码中有个增强for循环,来输出循环信息即是foreach的功能。
底层代码如下:


for (Map.Entry<K, V> entry : map.entrySet()) //Map.Entry<K, V>数据类型,entry 变量名,entrySet() 键值对类型的集合,map的有的返回值类型;
action.accept(entry.getKey(), entry.getValue()); //entry.getKey(), entry.getValue())变量名的特有的获取信息方法:键和值。


例如:

     Map<String,String> map =new HashMap<>();
       map.put("1","嘿嘿1");//特有的输入方式
       map.put("2","嘿嘿2");
       map.put("3","嘿嘿3");
       //foreach输出
       for (Map.Entry<String, String> entry : map.entrySet()) {
           System.out.println(entry.getKey() + ":" + entry.getValue());
       }//未使用lambda简化
       System.out.println("-------------");
       map.forEach((x,y)->System.out.println( x + " " + y));//lambda简化,jdk8之后使用;

在这里插入图片描述


总结:


1.这篇博客也不是纯粹是整理对(List、Map)foreach和lambda结合表达式简化foreach代码的理解,更像是如何解决遇到不会的类或者函数如何去通过API文档和idea底层代码去理解代码的原理;
2.后续还有要补充的再回来补充吧,有问题私聊哦,会及时回复!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值