怎么在java8的map中使用stream

IT的鱼      2022-04-17     731

关键词:

怎么在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);


 

怎么在java8的map中使用stream(代码片段)

怎么在java8的map中使用stream简介Map是java中非常常用的一个集合类型,我们通常也需要去遍历Map去获取某些值,java8引入了Stream的概念,那么我们怎么在Map中使用Stream呢?基本概念Map有key,value还有表示key,va... 查看详情

这么简单,还不会使用java8stream流的map()方法吗?(代码片段)

...为“王五”的语文成绩暂时修改为“100”,这些问题怎么处理呐,之前我们想到的是遍历每个元素,然后取出来放到另外一个集合中,在java8中对集合可以进行流式操作使上面的处理更简洁。今天来看下map()方法的... 查看详情

java8,stream().map().collect(collectors.tolist()).foreach()和stream().map().foreach()有什么区别?

...按照之前的顺序进行遍历,当然stream会更快一点。看具体使用场景 查看详情

java8中optional和.stream().map()

使用optional的好处:是一个可以包含或不可以包含非空值的容器对象,更加友好的处理程序中的空对象。Optional<T>有方法 isPresent() 和 get() 是用来检查其包含的对象是否为空或不是,然后返回它,如:Optional<S... 查看详情

java8中map()和flatmap()的区别(代码片段)

...latMap()源自于函数式语言,在Java8中,我们可以在Optional、Stream和CompletableFuture中找到它们(虽然名字稍有不同)。stream表示一个对象序列,而optionals表示一个值可以是存在的,也可以是不存在的,在其他aggregate操作中,有map()和flatMa... 查看详情

如何使用 lambda 表达式调试 stream().map(...)?

】如何使用lambda表达式调试stream().map(...)?【英文标题】:Howtodebugstream().map(...)withlambdaexpressions?【发布时间】:2014-08-2320:58:36【问题描述】:在我们的项目中,我们正在迁移到java8,并且正在测试它的新功能。在我的项目中,我... 查看详情

java8stream,map,option等函数式编程的使用例子(代码片段)

java8stream,map等函数式编程的一些典型用法例子如下。例子1:数组元素字母小写变大写。List<String>list=Arrays.asList("a","b","c","d");List<String>collect=list.stream().map(String::toUpp 查看详情

java8stream,map,option等函数式编程的使用例子(代码片段)

java8stream,map等函数式编程的一些典型用法例子如下。例子1:数组元素字母小写变大写。List<String>list=Arrays.asList("a","b","c","d");List<String>collect=list.stream().map(String::toUpp 查看详情

关于java8stream的相关使用及解析(代码片段)

文章目录前言一、Stream是什么?二、Stream使用1.源码1.collect2.map/flatMap映射转换3.filter过滤属性4.reduce聚合4.sorted排序总结前言蓦然回首,有好久不能够在休息日里去学习新知识、新技能,也好久没有把遇到的问题记录到... 查看详情

Java 8 - 在 stream.map() 中链接构造函数调用和设置器

】Java8-在stream.map()中链接构造函数调用和设置器【英文标题】:Java8-chainingconstructorcallandsetterinstream.map()【发布时间】:2016-02-0416:44:50【问题描述】:我有课classFooStringname;//setter,getter只有一个默认构造函数。然后,我正在尝试从... 查看详情

java8之stream/map

  本篇用代码示例结合JDk源码讲了Java8引入的工具接口Stream以及新Map接口提供的常用默认方法.  参考:http://winterbe.com/posts/2014/03/16/java-8-tutorial/  1.Stream示例 packagecom.mavsplus.java8.turtorial.stre 查看详情

java8使用streamapi转换map遇到的2种异常报错和解决思路(代码片段)

...需要先new一个Map对象,遍历list然后通过Map#put来初始化。使用java8后,可方便的使用list.stream().collect(Collectors.toMap(...))进行转换。然而这种转换可能会遇到转换失败程序报错的情况,这里总结了常见的2种报错的例子和解决思路。... 查看详情

jdk8的特性stream().map()(代码片段)

在Java8中stream().map(),您可以将对象转换为其他对象1.大写字符串列表packagecom.mkyong.java8;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.stream.Collectors;publicclassTestJava8 查看详情

jdk8的特性stream().map()(代码片段)

在Java8中stream().map(),您可以将对象转换为其他对象1.大写字符串列表packagecom.mkyong.java8;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.stream.Collectors;publicclassTestJava8 查看详情

java8新特性_stream详解(代码片段)

...我会着重写对list的处理,毕竟实际工作中大家每天进行使用Stream简单介绍定义Asequenceofelementssupportingsequentialandparallelaggregateoperations.支持顺序并行聚合操作的元素序列看 查看详情

java8的streams

...们的points属性和。在Java8之前,要解决这个问题,则需要使用foreach循环遍历task集合;但是在Java8中可以利用steams解决:包括一系列元素的列表,并且支持顺序和并行处理。//Calculatetotalpointsofallactivetasksusingsum()finallongtotalPoint 查看详情

java8中处理集合的优雅姿势——stream

...以让你以一种声明的方式处理数据。本文就来介绍下如何使用S 查看详情

java8中处理集合的优雅姿势——stream

...以让你以一种声明的方式处理数据。本文就来介绍下如何使用S 查看详情