关键词:
怎么在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 查看详情