时间:2021-05-20
今天写根过滤的时候一下子有点愣眼,先是想到用 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 过滤的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Hashtable类Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。添
按照常规思维,往一个map里put一个已经存在的key,会把原有的key对应的value值覆盖,然而通过一次线上问题,发现Java8中的Collectors.t
建立map的方式(其实用的是json实现方式)复制代码代码如下:vara={};a["key1"]="value1";a["key2"]="value2";既然
Map读取键值对,Java遍历Map的两种实现方法第一种方法是根据map的keyset()方法来获取key的set集合,然后遍历map取得value的值impo
java的Map集合中按value值进行排序输出的实例代码importjava.util.Arrays;importjava.util.Comparator;i