今天写根过滤的时候一下子有点愣眼, 先是想到用 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"));
- }
- }
如果觉得内容还不错, 可以关注一下我哦
期待与你相遇, 一同成长前行!
来源: http://www.jianshu.com/p/8734656e8d8e