当前位置: 移动技术网 > IT编程>开发语言>Java > 如何在java 8 map中使用stream

如何在java 8 map中使用stream

2020年05月13日  | 移动技术网IT编程  | 我要评论

c919首飞最新消息直播,壹黄小宝,仇和最新消息

简介

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

本文的例子

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网