Java Map 通过 key 或者者 value 过滤
来源:志哥     阅读:673
润源
发布于 2018-07-01 23:28
查看主页

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

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

<dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>            <scope>test</scope>            <exclusions>                <exclusion>                    <groupId>org.hamcrest</groupId>                    <artifactId>hamcrest-core</artifactId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>org.hamcrest</groupId>            <artifactId>hamcrest-library</artifactId>            <version>1.3</version>            <scope>test</scope>        </dependency>        <dependency>            <groupId>com.google.guava</groupId>            <artifactId>guava</artifactId>            <version>25.1-jre</version>        </dependency></dependencies>

filter by key

public class FilterMapByKeyTest {    private Map<Integer, String> 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<Integer, String> map = new HashMap<>();        for (Map.Entry<Integer, String> 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<Integer, String> 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<Integer, String> map = Maps.filterKeys(WEEK, r -> r <= 3);        assertThat(map.keySet(), contains(1, 2, 3));    }}

filter by value

public class FilterMapByValueTest {    private Map<Integer, String> 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<Integer, String> map = new HashMap<>();        for (Map.Entry<Integer, String> 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<Integer, String> 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<Integer, String> map = Maps.filterValues(WEEK, r -> r.startsWith("S"));        assertThat(map.values(), contains("Saturday","Sunday"));    }}

假如觉得内容还不错,能关注一下我哦
期待与你相遇,一同成长前行!

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
非科班出生的Web前台程序员,从这三个方面来提升自己
线程安全: 互斥锁和自旋锁(10种)
项目管理_05 如何裁剪项目管理方法论
macOS配置vim
Oceanus:美团HTTP流量定制化路由的实践
首页
搜索
订单
购物车
我的