Java Map 通過 key 或者 value 過濾
阿新 • • 發佈:2018-06-29
BE IV test 循環 clu lam version 依賴 lte 今天寫根過濾的時候一下子有點楞眼,先是想到用 Java 原生的 map 循環查出來,但是覺得太 low, 後面思考了一下可以用 Java8 的 Lambda,寫完了,又發現 Google Guava 有現成的方法,這裏一一列出來,供參考使用。
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
首先提示,如果照搬我的代碼的話別忘了引這些依賴
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
<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 過濾