Map集合的遍历方式(3种)
2023-04-18 15:42:30 时间
第一种根据键找值
先获取Map集合的全部键的Set集合
遍历键的Set集合,然后通过键提取对应的值
package DomeMap;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Test4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String, Integer> buy=new HashMap<>();
buy.put("苹果手机", 2);//添加键值对
buy.put("智能手表", 1);
buy.put("java书", 1);
buy.put("c语言书", 1);
buy.put("西瓜", 2);
//Map集合的遍历
//先把所有键取出来
Set<String> s1=buy.keySet();
//开始根据键找值
for (String key : s1) {
Integer value=buy.get(key);
System.out.println(key+"->>>>"+value);
}
}
}
第二种方式
使用foreach遍历Map集合发现Map集合的键值对元素直接是没有类型的。所以不能直接用foreach遍历集合
可以通过调用Map的方法:entrySet把Map结合转化成Set集合的形式
打包后在内部会以键值对对象的形式存储{(key,value),key,value),key,value),key,value)}
更加的符合面向对象
Set<Map.Entry<String,Integer>> 就可以看成键值对类型遍历了
public class Test5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String, Integer> buy=new HashMap<>();
buy.put("苹果手机", 2);//添加键值对
buy.put("智能手表", 1);
buy.put("java书", 1);
buy.put("c语言书", 1);
buy.put("西瓜", 2);
Set<Map.Entry<String,Integer>> en=buy.entrySet();
for (Map.Entry<String, Integer> entry : en) {
String key=entry.getKey();
Integer value=entry.getValue();
System.out.println(key+"->>>"+value);
}
}
}
第三种方式:Lamubda表达式(最简单)
得力于JDK8开始的新技术Lamubda表达式,提供了一种更简单,更直接的遍历集合的方式
package DomeMap;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
public class Lmtest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
Map<String, Integer> buy=new HashMap<>();
buy.put("苹果手机", 2);//添加键值对
buy.put("智能手表", 1);
buy.put("java书", 1);
buy.put("c语言书", 1);
buy.put("西瓜", 2);
//Lamubda表达式遍历
buy.forEach(new BiConsumer<String, Integer>() {
@Override
public void accept(String t, Integer u) {
System.out.println(t+"->>>"+u);
}
});
}
}
Lamubda还可以继续化简
化简的规则为
参数类型可以省略不写
如果只有一个参数,参数类型可以省略,同时(也可以省略)
如果Lamubda表达式的方法体代码只有一行代码。可以省略大括号不写,同时省略分号
如果Lamubda表达式的方法体只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省省略分号不写
package DomeMap;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
public class Lmtest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
Map<String, Integer> buy=new HashMap<>();
buy.put("苹果手机", 2);//添加键值对
buy.put("智能手表", 1);
buy.put("java书", 1);
buy.put("c语言书", 1);
buy.put("西瓜", 2);
//Lamubda表达式遍历
buy.forEach((t,u)-> {
System.out.println(t+"->>>"+u);
});
}
}
相关文章
- Smobiler快手小程序开发指南
- RabbitMQ延迟消息指南【.NET6+EasyNetQ】
- System.IO.FileSystemWatcher的坑
- dotnet 用 SourceGenerator 源代码生成技术实现中文编程语言
- 【MFC拓展库】上海道宁与BCGSOFT合作为您带来专业的Micrisoft Windows开发业务组件
- Azure DevOps Pipelines部署.Net Core 应用到Kubernetes
- AspNet goto 语句
- 撬开多线程的大门——学习多线程必须掌握的基本概念
- .Net Core 依赖注入
- C#使用Task在Winform建立控件上的提示等待窗口,实现局部等待加载,不影响主线程(一)
- .NET 采用 SkiaSharp 生成二维码和图形验证码及图片进行指定区域截取方法实现
- 它让你1小时精通RabbitMQ消息队列(新增死信处理)
- 用编译配置与环境变量实现开发时切换配置文件
- 动态编译库 Natasha 5.0 兼容版本发布
- dotnet C# 使用 Vortice 支持 Direct2D1 离屏渲染
- 在vscode中使用R时,用快捷键来快捷键入卡片内容
- Alglib 求解函数最小值
- Git 分支管理规范
- 【BotR】CLR堆栈遍历(Stackwalking in CLR)
- 【BotR】CLR类型系统