资讯专栏INFORMATION COLUMN

Java Map 通过 key 或者 value 过滤

timger / 1374人阅读

摘要:今天写根过滤的时候一下子有点愣眼,先是想到用原生的循环查出来,但是觉得太,后面思考了一下可以用的,写完了,又发现有现成的方法,这里一一列出来,供参考使用。

今天写根过滤的时候一下子有点愣眼,先是想到用 Java 原生的 map 循环查出来,但是觉得太 low, 后面思考了一下可以用 Java8 的 Lambda,写完了,又发现 Google Guava 有现成的方法,这里一一列出来,供参考使用。

首先提示,如果照搬我的代码的话别忘了引这些依赖


        
            junit
            junit
            4.12
            test
            
                
                    org.hamcrest
                    hamcrest-core
                
            
        

        
            org.hamcrest
            hamcrest-library
            1.3
            test
        

        
            com.google.guava
            guava
            25.1-jre
        
filter by key
public class FilterMapByKeyTest {
    private Map WEEK = new HashMap<>();

    @Before
    public void setUp () {
        WEEK.put(1, "Monday");
        WEEK.put(2, "Tuesday");
        WEEK.put(3, "Wednesday");
        WEEK.put(4, "Thursday");
        WEEK.put(5, "Friday");
        WEEK.put(6, "Saturday");
        WEEK.put(7, "Sunday");
    }

    /**
     * Java 8之前的版本
     */
    @Test
    public void filterMapByKey () {
        Map map = new HashMap<>();
        for (Map.Entry entry : WEEK.entrySet()) {
            if (entry.getKey() <= 3) {
                map.put(entry.getKey(), entry.getValue());
            }
        }
        assertThat(map.keySet(), contains(1, 2, 3));
    }

    /**
     * Java 8 Lambda
     */
    @Test
    public void filterMapByKeyJava8Lambda () {
        Map map = WEEK.entrySet().stream().filter(r -> r.getKey() <= 3)
                        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
        assertThat(map.keySet(), contains(1, 2, 3));
    }

    /**
     * Google Guava
     */
    @Test
    public void filterMapByKeyGuava () {
        Map map = Maps.filterKeys(WEEK, r -> r <= 3);
        assertThat(map.keySet(), contains(1, 2, 3));
    }

}
filter by value
public class FilterMapByValueTest {
    private Map WEEK = new HashMap<>();

    @Before
    public void setUp () {
        WEEK.put(1, "Monday");
        WEEK.put(2, "Tuesday");
        WEEK.put(3, "Wednesday");
        WEEK.put(4, "Thursday");
        WEEK.put(5, "Friday");
        WEEK.put(6, "Saturday");
        WEEK.put(7, "Sunday");
    }

    /**
     * Java 8之前的版本
     */
    @Test
    public void filterMapByValue () {
        Map map = new HashMap<>();
        for (Map.Entry entry : WEEK.entrySet()) {
            if (entry.getValue().startsWith("S")) {
                map.put(entry.getKey(), entry.getValue());
            }
        }
        assertThat(map.values(), contains("Saturday","Sunday"));
    }

    /**
     * Java 8 Lambda
     */
    @Test
    public void filterMapByValueJava8Lambda () {
        Map map = WEEK.entrySet().stream().filter(r -> r.getValue().startsWith("S"))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
        assertThat(map.values(), contains("Saturday","Sunday"));
    }

    /**
     * Google Guava
     */
    @Test
    public void filterMapByValueGuava () {
        Map map = Maps.filterValues(WEEK, r -> r.startsWith("S"));
        assertThat(map.values(), contains("Saturday","Sunday"));
    }
}

如果觉得内容还不错,可以关注一下我哦
微信公众号:志哥 (ID: zhige-me)
期待与你相遇,一同成长前行!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71413.html

相关文章

  • kotlin学习笔记-异常好玩的list集合总结

    摘要:可能是最流行的集合类型。它是一个范性有序的集合。一个无序并不支持重复的集合。接口继承接口,集合中可以存放重复对象。集合类提供了,等高阶函数去处理。我们声明一个集合或者数组,可以转换成相应类型的集合。调用转换为可变集合。 不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){ var StringVal = 12_...

    RebeccaZhong 评论0 收藏0
  • Spring Cloud Gateway修改请求和响应body的内容

    摘要:欢迎访问我的欢迎访问我的内容所有原创文章分类汇总及配套源码,涉及等本篇概览本篇概览作为实战系列的第九篇,咱们聊聊如何用修改原始请求和响应内容,以及修改过程中遇到的问题首先是修改请求,如下图,浏览器是请求发起方,真实参数只有,经过网关时被塞欢迎访问我的GitHubhttps://github.com/zq2599/blog_demos内容:所有原创文章分类汇总及配套源码,涉及Java、Dock...

    ivyzhang 评论0 收藏0
  • SpringMVC入门笔记

    摘要:简介注解用于修饰的方法,根据的的内容,通过适当的转换为客户端需要格式的数据并且写入到的数据区,从而不通过视图解析器直接将数据响应给客户端。并且这些解析器都实现了接口,在接口中有四个最为主要的接口方法。 SpringMVC 细节方面的东西很多,所以在这里做一篇简单的 SpringMVC 的笔记记录,方便以后查看。 Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本...

    gekylin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<