map集合常见的几种遍历方式(超详细)

关于map集合的遍历,还是有很多方式的,接下来就由我为大家,演示一下爱比较常用的关于map集合的遍历方式。

第一种遍历方式--键找值: 先获取map集合全部的键,在通过遍历键,来找值。

java 复制代码
public static void main(String[] args) {
        //第一种遍历方式 键找值
        Map<String,Integer> map = new HashMap<>();
        map.put("huawei",7999);
        map.put("java入门课程",29);
        map.put("redmi",1999);
        map.put("oppo",3999);
        map.put("vivi",899);
        System.out.println(map);
 
        // 获取所有的key
        Set<String> keys = map.keySet();
        Collection<Integer> values = map.values();
        for (String key : keys) {
            Integer value = map.get(key);
            System.out.println(key +" ===> " + value);
        }
    }
 
 
    /**
     * {huawei=7999, vivi=899, oppo=3999, redmi=1999, java入门课程=29}
     * huawei ===> 7999
     * vivi ===> 899
     * oppo ===> 3999
     * redmi ===> 1999
     * java入门课程 ===> 29
     */

这种方式遍历map集合的缺点就是,使用增强for循环遍历的时候,无法直接确定元素类型。

java 复制代码
for(元素类型  keys: map){

        ...

}

第二种方式--键值对:

java 复制代码
  public static void main(String[] args) {
        //第一种遍历方式 键值对
        Map<String,Integer> map = new HashMap<>();
        map.put("huawei",7999);
        map.put("java入门课程",29);
        map.put("redmi",1999);
        map.put("oppo",3999);
        map.put("vivi",899);
        System.out.println(map);
 
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+" ===> "+value);
        }
    }
 
 
  /**
     * {huawei=7999, vivi=899, oppo=3999, redmi=1999, java入门课程=29}
     * huawei ===> 7999
     * vivi ===> 899
     * oppo ===> 3999
     * redmi ===> 1999
     * java入门课程 ===> 29
     */

第三种方式:Lamdba表达式: 这是jdk1.8开始之后的新技术(非常简单便捷)

java 复制代码
 public static void main(String[] args) {
        //第一种遍历方式 lambda表达式遍历
        Map<String,Integer> map = new HashMap<>();
        map.put("huawei",7999);
        map.put("java入门课程",29);
        map.put("redmi",1999);
        map.put("oppo",3999);
        map.put("vivi",899);
        System.out.println(map);
 
        //匿名内部类
        map.forEach(new BiConsumer<String, Integer>() {
            @Override
            public void accept(String key, Integer value) {
                System.out.println(key  +" ===> "+ value);
            }
        });
    }
 
 /**
     * {huawei=7999, vivi=899, oppo=3999, redmi=1999, java入门课程=29}
     * huawei ===> 7999
     * vivi ===> 899
     * oppo ===> 3999
     * redmi ===> 1999
     * java入门课程 ===> 29
     */
java 复制代码
lamdba表达式简化写法1:
  public static void main(String[] args) {
        //第一种遍历方式 lambda表达式遍历
        Map<String,Integer> map = new HashMap<>();
        map.put("huawei",7999);
        map.put("java入门课程",29);
        map.put("redmi",1999);
        map.put("oppo",3999);
        map.put("vivi",899);
        System.out.println(map);
 
        //简化写法lamdba表达式
        map.forEach((String key, Integer value) -> {
                System.out.println(key  +" ===> "+ value);
        });
    }
 
 
/**
 * huawei ===> 7999
 * vivi ===> 899
 * oppo ===> 3999
 * redmi ===> 1999
 * java入门课程 ===> 29
 */

lamdba表达式简化写法2:

java 复制代码
public static void main(String[] args) {
        //第一种遍历方式 lambda表达式遍历
        Map<String,Integer> map = new HashMap<>();
        map.put("huawei",7999);
        map.put("java入门课程",29);
        map.put("redmi",1999);
        map.put("oppo",3999);
        map.put("vivi",899);
        System.out.println(map);
 
        map.forEach((key,value) -> System.out.println(key  +" ===> "+ value));
    }
 
    /**
     * huawei ===> 7999
     * vivi ===> 899
     * oppo ===> 3999
     * redmi ===> 1999
     * java入门课程 ===> 29
     */

第五种遍历方式--stream流:

java 复制代码
 public static void main(String[] args) {
        //第四种遍历方式 stream流
        Map<String,Integer> map = new HashMap<>();
        map.put("huawei",7999);
        map.put("java入门课程",29);
        map.put("redmi",1999);
        map.put("oppo",3999);
        map.put("vivi",899);
        System.out.println(map);
 
        System.out.println("------------------");
        map.entrySet().stream().forEach(e -> System.out.println(e));
 
    }
 
    /**
     * huawei=7999
     * vivi=899
     * oppo=3999
     * redmi=1999
     * java入门课程=29
     */
相关推荐
三小河23 分钟前
SWC 凭什么比 Babel 快 ?项目优化迁移踩坑记录
前端·后端
鶴哥只手遮天42 分钟前
《Redis 8.10.3 深度剖析》系列 ·第 17 章. 一个迟到十六年的类型
redis·后端·开源
知守观1 小时前
同一个团队两套分包:DDD 四层落地后,domain 层最大的类还是 5885 行
java·后端·领域驱动设计
Anymous1 小时前
我手写的 Redis 锁,输给了 10 秒的 TTL
后端·架构
Rain的Java大神之路2 小时前
设计一套生产级 API 接口:从契约、安全、幂等到限流,我踩过的坑都在这了
java·后端·面试
SimonKing2 小时前
零配置也能白嫖前沿大模型!dsh-our-free-model插件真香警告
java·后端·程序员
nice_lcj5202 小时前
【从零理解 Spring AI · 15】让检索更准:先宽召回,再精排序
java·后端·rag·spring ai·ai应用开发·检索优化·重排序
回家路上绕了弯2 小时前
要人确认的那一步,在确认什么?
后端
IT_陈寒3 小时前
JavaScript项目实战经验分享:从内存泄漏到性能优化的血泪史
前端·人工智能·后端
杨凯凡3 小时前
Spring Boot 链路追踪实战:Micrometer、TraceId 与异步线程上下文传播
java·spring boot·后端