Java Map 通过 key 或者 value 过滤的实例代码

今天写根过滤的时候一下子有点愣眼,先是想到用 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"));

}

}

总结

以上所述是小编给大家介绍的Java Map 通过 key 或者 value 过滤的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是 Java Map 通过 key 或者 value 过滤的实例代码 的全部内容, 来源链接: utcz.com/z/328970.html

回到顶部