时间:2021-05-19
简介
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
背景Java8的stream接口极大地减少了for循环写法的复杂性,stream提供了map/reduce/collect等一系列聚合接口,还支持并发操作:pa
一、java8stream操作Listmaps转Map的两种方法第一种,实用于数据查询返回的是Listmaps方法一、Map;resultMap=lists.s
引言在java8中,您可以使用Arrays.Stream或Stream.of将Array转换为Stream。1.对象数组对于对象数组,Arrays.stream
1.前言Java8提供了非常好用的StreamAPI,可以很方便的操作集合。今天我们来探讨两个Stream中间操作map(Functionmapper)和fla
java8stream提供了下面几种类型的求和Stream::mapToIntStream::mapToDoubleStream::mapToLongpubli