怎么在java 8的map中使用stream

简介: 怎么在java 8的map中使用stream

怎么在java 8的map中使用stream


简介


Map是java中非常常用的一个集合类型,我们通常也需要去遍历Map去获取某些值,java 8引入了Stream的概念,那么我们怎么在Map中使用Stream呢?


基本概念


Map有key,value还有表示key,value整体的Entry。


创建一个Map:


Map<String, String> someMap = new HashMap<>();


获取Map的entrySet:


Set<Map.Entry<String, String>> entries = someMap.entrySet();


获取map的key:


Set<String> keySet = someMap.keySet();


获取map的value:


Collection<String> values = someMap.values();


上面我们可以看到有这样几个集合:Map,Set,Collection。


除了Map没有stream,其他两个都有stream方法:


Stream<Map.Entry<String, String>> entriesStream = entries.stream();
        Stream<String> valuesStream = values.stream();
        Stream<String> keysStream = keySet.stream();


我们可以通过其他几个stream来遍历map。


使用Stream获取map的key


我们先给map添加几个值:


someMap.put("jack","20");
someMap.put("bill","35");


上面我们添加了name和age字段。


如果我们想查找age=20的key,则可以这样做:


Optional<String> optionalName = someMap.entrySet().stream()
                .filter(e -> "20".equals(e.getValue()))
                .map(Map.Entry::getKey)
                .findFirst();
        log.info(optionalName.get());


因为返回的是Optional,如果值不存在的情况下,我们也可以处理:


optionalName = someMap.entrySet().stream()
                .filter(e -> "Non ages".equals(e.getValue()))
                .map(Map.Entry::getKey).findFirst();
        log.info("{}",optionalName.isPresent());


上面的例子我们通过调用isPresent来判断age是否存在。


如果有多个值,我们可以这样写:


someMap.put("alice","20");
        List<String> listnames = someMap.entrySet().stream()
                .filter(e -> e.getValue().equals("20"))
                .map(Map.Entry::getKey)
                .collect(Collectors.toList());
        log.info("{}",listnames);


上面我们调用了collect(Collectors.toList())将值转成了List。


使用stream获取map的value


上面我们获取的map的key,同样的我们也可以获取map的value:


List<String> listAges = someMap.entrySet().stream()
                .filter(e -> e.getKey().equals("alice"))
                .map(Map.Entry::getValue)
                .collect(Collectors.toList());
        log.info("{}",listAges);


上面我们匹配了key值是alice的value。


总结


Stream是一个非常强大的功能,通过和map相结合,我们可以更加简单的操作map对象。


本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/stream-formap

相关文章
|
1天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第28天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的语法特性,允许我们将函数作为参数传递给方法或者作为返回值。而Stream API是一种处理集合的新方式,它提供了一种高效且简洁的方式来处理数据。通过学习这两个特性,我们可以编写出更加简洁、高效的Java代码。
|
1天前
|
Java API 数据处理
Java 8新特性之Stream API详解
【5月更文挑战第28天】本文将详细介绍Java 8中的一个重要新特性——Stream API。Stream API是Java 8中引入的一种新的数据处理方式,它允许我们以声明式的方式处理数据,使得代码更加简洁、易读。文章将从Stream的基本概念、创建方式、常用操作以及使用场景等方面进行详细讲解,帮助读者深入理解并掌握Stream API的使用。
|
1天前
|
存储 Java Serverless
Java集合利器 Map & Set
Java集合利器 Map & Set
|
1天前
|
Java API 数据处理
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第28天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的编程语法,可以使代码更加简洁、易读。而Stream API则是一种处理数据的新方法,可以让我们更高效地处理集合数据。通过学习这两个特性,我们可以编写出更加简洁、高效的Java代码。
|
1天前
|
Java API
Java 8新特性之Stream API详解
【5月更文挑战第28天】本文将详细解析Java 8中的一个重要新特性——Stream API。Stream API是Java 8引入的一种新的数据处理方式,它允许我们以声明性和函数式的方式处理数据。我们将详细介绍Stream API的基本概念,使用方法,以及如何使用它来简化我们的代码。
|
1天前
|
Java API 数据处理
Java 8新特性:Stream API详解
【5月更文挑战第28天】本文将详细解析Java 8的新特性之一——Stream API。Stream API是Java 8中引入的一种新的数据处理方式,它允许我们以声明性和函数式的方式处理数据。我们将深入探讨Stream API的基本概念,使用方法以及一些高级技巧。无论你是Java初学者还是经验丰富的开发者,都可以从中获得有用的信息。
|
2天前
|
分布式计算 Java API
Java 8新特性之Stream API详解
【5月更文挑战第27天】 本文将详细解析Java 8中的一个重要新特性——Stream API。Stream API是Java 8中引入的一种新的数据处理方式,它允许我们以声明性和函数式的方式处理数据。我们将深入探讨Stream API的基本概念,使用方法以及一些高级技巧。无论你是Java初学者还是资深开发者,本文都将帮助你更好地理解和使用Stream API。
|
2天前
|
Java 程序员 API
Java 8新特性深度解析:Stream API和Lambda表达式
【5月更文挑战第27天】 在Java 8中,引入了两个重要的新特性:Stream API和Lambda表达式。这两个特性不仅提高了Java程序员的生产力,也使得Java代码更加简洁易读。本文将深入探讨这两个特性的使用方法和优势,以及如何在实际应用中结合使用它们。
|
3天前
|
Java 大数据 程序员
使用Java Stream API实现高效数据处理
在大数据和复杂业务逻辑的时代,高效的数据处理成为了软件开发的关键。本文将探讨如何使用Java 8引入的Stream API,通过函数式编程的方式,实现高效、简洁、可读的数据处理。我们将介绍Stream API的基本概念、核心操作,并通过一个具体的实例,展示如何利用Stream API解决复杂的数据处理问题,同时提升代码的可读性和可维护性。
|
5天前
|
安全 算法 Java
Java Stream API:原理、应用与深入解析
Java Stream API:原理、应用与深入解析