ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Guava常用的集合扩展

2021-09-11 22:00:28  阅读:171  来源: 互联网

标签:Java language -- 扩展 System put 集合 multiset Guava


做过Java开发的码农,应该对Guava库非常熟悉。Guava是由谷歌开源的Java库,Guava库日益强大,涉及到Java开发的方方面面,用以帮助Java码农更高效的开发。

​ 此篇来介绍下Guava包中常用的几种对Java集合的扩展。

Multimap

​ 这是对Map的扩展,Map是一对一的映射,一键对一值,那当我们想一键对应多个值时怎么办?

​ 由于Map的值是Object类型,所以我们肯定写过Map<String, List<Map<String, Object>>这种结构,这确实可以达到目的。

但是这种结构写起来很繁杂,大家应该有所感触。

此处仅以HashMultimap实现类当做示例:

public void test1() {
  Multimap<String, String> map = HashMultimap.create();
  map.put("language", "Java");
  map.put("language", "php");
  map.put("language", "python");
  map.put("language", "c++");
  log.info("编程语言: {}", map.get("language"));
}

输出:

guava.MultiMapTest - 编程语言: [Java, php, python, c++]

返回的是一个集合;该map的其他方法都见名知意,易于使用。

BiMap

​ 通常使用Map结构都是通过键查找对应的值,对于要通过值查找键就必须循环比较了;

BiMap此类型就提供了keyvalue的双向映射,便于通过value查找key,要注意的是BiMap结构要求keyvalue都是唯一的。

此处仅以HashBiMap实现类作为示例:

public void test2() {
  BiMap<String, String> biMap = HashBiMap.create();
  biMap.put("language", "Java");
  // 同key时, value会覆盖之前的
  biMap.put("language", "php");
  // 同value时, key强制覆盖之前的
  biMap.forcePut("test", "Java");
  System.out.println("原始BiMap -- " + biMap);

  BiMap<String, String> inverse = biMap.inverse();
  System.out.println("inverse翻转之后 -- " + inverse);
}

输出:

原始BiMap -- {language=php, test=Java}
inverse翻转之后 -- {php=language, Java=test}

Table

​ Map提供了一对一的映射,Table则提供二对一的映射

此处仅以HashBasedTable实现类为示例:

public void test3() {
  Table<String, String, Object> table = HashBasedTable.create();
  table.put("row1", "column1", "value1");
  table.put("row1", "column2", "value2");
  table.put("row1", "column3", "value3");
  Map<String, Object> row1 = table.row("row1");
  System.out.println("根据rowKey取值 --  " + row1);

  Map<String, Object> column1 = table.column("column1");
  System.out.println("根据columnKey取值  -- " + column1);
}

输出:

根据rowKey取值 --  {column1=value1, column2=value2, column3=value3}
根据columnKey取值  -- {row1=value1}

Multiset

multiset可获取某个元素的个数

public void test5() {
  Multiset<String> multiset = HashMultiset.create();
  multiset.add("a");
  multiset.add("b");
  multiset.add("a");
  System.out.println("multiset集合  -- " + multiset);
  System.out.println("multiset大小  -- " + multiset.size());
  System.out.println("a个数 -- " + multiset.count("a"));
  System.out.println("b个数 -- " + multiset.count("b"));
}

输出:

multiset集合  -- [a x 2, b]
multiset大小  -- 3
a个数 -- 2
b个数 -- 1

标签:Java,language,--,扩展,System,put,集合,multiset,Guava
来源: https://www.cnblogs.com/tjstep/p/15256898.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有