getvalue函数怎么使用_怎么在java 8的map中使用stream

简介

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

基本概念

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

创建一个Map:

Map someMap = new HashMap<>();

获取Map的entrySet:

Set> entries = someMap.entrySet();

获取map的key:

Set keySet = someMap.keySet();

获取map的value:

Collection values = someMap.values();

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

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

Stream> entriesStream = entries.stream();        Stream valuesStream = values.stream();        Stream keysStream = keySet.stream();

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

使用Stream获取map的key

我们先给map添加几个值:

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

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

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

Optional 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 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 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对象。

01166aba60bc3a52c9350242a11c9112.png

欢迎关注我的公众号:程序那些事,更多精彩等着您!

更多内容请访问:flydean的博客 flydean.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值