`
vipcowrie
  • 浏览: 352278 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
1167aa84-228b-38f8-88a0-4733613efdef
让Java跑起来
浏览量:64805
文章分类
社区版块
存档分类
最新评论

Google Guava集合2:Multimap

阅读更多
Multimap是guava中一个有用的工具类,下面我来介绍一下。

由来:
你是不是经常需要一个这样的数据结构:
Map<String,List<MyClass>> myClassListMap test2
                              = new HashMap<String,List<MyClass>>()

自己实现太麻烦,你需要检查key是否存在,否则创建一个,最后代码成为这个样子:
void putMyObject(String key, Object value) {
    List<Object> myClassList = myClassListMap.get(key);
    if(myClassList == null) {
        myClassList = new ArrayList<object>();
        myClassListMap.put(key,myClassList);
    }
    myClassList.add(value);
}


比较痛苦,如果你希望检查List中的对象是否存在,删除一个对象,或者遍历整个数据结构,那么需要更多的代码。

guava来了:
Multimap<String,Object> myMultimap = ArrayListMultimap.create();


这里需要注意,所有的guava的集合都有create()方法,这个好处就是比较简单,你不用重复泛型信息了。

好了,开始使用Multimap了:
public class MutliMapTest {
    public static void main(String... args) {
  Multimap<String, String> myMultimap = ArrayListMultimap.create();
  
  // Adding some key/value
  myMultimap.put("Fruits", "Bannana");
  myMultimap.put("Fruits", "Apple");
  myMultimap.put("Fruits", "Pear");
  myMultimap.put("Vegetables", "Carrot");
  
  // Getting the size
  int size = myMultimap.size();
  System.out.println(size);  // 4
  
  // Getting values
  Collection<string> fruits = myMultimap.get("Fruits");
  System.out.println(fruits); // [Bannana, Apple, Pear]
  
  Collection<string> vegetables = myMultimap.get("Vegetables");
  System.out.println(vegetables); // [Carrot]
  
  // Iterating over entire Mutlimap
  for(String value : myMultimap.values()) {
   System.out.println(value);
  }
  
  // Removing a single value
  myMultimap.remove("Fruits","Pear");
  System.out.println(myMultimap.get("Fruits")); // [Bannana, Pear]
  
  // Remove all values for a key
  myMultimap.removeAll("Fruits");
  System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!)
}
}

这里有一点你可能会疑惑,就是为何get方法返回的是一个collection而不是list,这是因为前者会更加有用。如果你需要基于multimap直接操作list或者set,那么可以使用在定义类型的时候使用子类名称:ListMultimap,SetMultimap和SortedSetMultimap。例如:
ListMutlimap<String,String> myMutlimap = ArrayListMultimap.create();

List<string> myValues = myMutlimap.get("myKey");  // Returns a List, not a Collection.



好了,基本就是这样,你可以参考API获取更多信息:http://docs.guava-libraries.googlecode.com/git-history/release09/javadoc/com/google/common/collect/Multimap.html
分享到:
评论

相关推荐

    google开源项目guava.jar包

    例如,它包含Multiset(多集合)和Multimap(多映射)这样的数据结构,可以方便地处理多值关联的情况。Guava还引入了ImmutableCollection(不可变集合),确保集合一旦创建就无法修改,提高了代码的安全性。 在并发...

    Guava常用类库 v33.0.0.zip

    Guava是Google开发的一个Java库,它包含许多Google核心库中的高级集合、缓存、原生类型支持、并发包、字符串处理、I/O等工具类。版本33.0.0是Guava的一个更新,提供了最新的功能改进和错误修复。在深入探讨Guava常用...

    guava-18.0(guava-18.0.jar和guava-18.0-sources.jar)

    Guava是Google开发的一个核心库,它为Java平台提供了许多实用工具类,涵盖了集合、并发、I/O、字符串处理、数学运算等多个方面。这个压缩包包含的是Guava库的18.0版本,分为两个部分:`guava-18.0.jar`和`guava-18.0...

    java集合分组(Guava)

    Guava是Google推出的一个强大的Java工具包,其中的Multiset、Multimap和GroupingBy等功能提供了高级的集合操作,特别是对于集合的分组功能,它提供了一种高效且灵活的方式。 首先,我们需要理解Guava中的`...

    Getting Started with Google Guava code

    1. **集合框架增强**:Guava 提供了丰富的集合类,如 Multiset(多集合)、Multimap(多映射)、Immutable collections(不可变集合)等,这些集合在功能和性能上都优于 Java 标准库中的集合。 2. **缓存**:Guava ...

    guava-use:使用谷歌guava工具包

    标题中的“guava-use:使用谷歌guava工具包”表明我们即将探讨的是Google提供的Guava库,这是一个广泛使用的Java库,包含了许多实用的工具类和集合框架的扩展。Guava库旨在提高Java开发的效率,提供了如缓存、并发...

    Google Guava 官方教程

    Guava 提供了丰富的集合类,如 Multiset(多集)、Multimap(多映射)和 Table(表格)。它们允许开发者处理更复杂的数据结构。例如,Multiset 可以统计元素出现的次数,Multimap 允许一个键关联多个值,Table 则...

    google guava 中文教程

    Google Guava是Google开发的一个开源Java库,它包含了一系列高级且实用的集合类、缓存机制、并发工具、字符串处理、I/O工具等,极大地提升了Java开发者的工作效率。Guava的目标是通过提供一系列现代实用工具,帮助...

    assertj-guava:AssertJ Guava是特定于Guava类型(如Multimap,Optional或Table)的断言库

    AssertJ Guava是一个专门针对Google Guava库中的数据结构和类型,如Multimap、Table、ByteSource以及Optional等,设计的断言库。它扩展了AssertJ的核心功能,使得在进行单元测试时,能够对Guava类型的数据进行更方便...

    guavapdf-ch_GoogleGuava官方教程_

    **Guava集合框架** Guava提供了丰富的集合类,如Multiset(多集)、Multimap(多映射)、ImmutableCollection(不可变集合)等,它们在功能上比Java内置的集合类更为强大。例如,Multiset允许元素有多个计数值,而...

    guava-web:Guava_Web

    Guava 是由 Google 开发的一个 Java 库,提供了许多基础工具类,如集合、缓存、原生类型支持、并发库、字符串处理等。Guava_Web 可能是 Guava 库的扩展或一个使用 Guava 的特定Web框架集成。 【描述】"番石榴网页...

    guava(google的java集合包)

    Guava是Google为Java平台设计的一个开源库,它极大地扩展了Java的标准库,尤其是在集合、缓存、并发和I/O等方面。Guava的核心特性包括: 1. **集合框架增强**:Guava提供了丰富的集合类,如Multiset(多集)、...

    google guava

    Google Guava是一个由Google开发并维护的开源Java库,它为Java开发者提供了许多实用的工具类和集合框架,极大地简化了常见的编程任务。这个框架包含了多个模块,如基础(base)、缓存(cache)、I/O(io)以及并发...

    Getting Started with Google Guava英文版

    1. **集合类**:Guava提供了丰富的集合类扩展,例如`ImmutableList`、`ImmutableSet`、`Multiset`、`Multimap`等,这些集合类不仅提供了更好的性能,还增加了更多的灵活性。 2. **缓存机制**:Guava内置了强大的缓存...

    Getting Started with Google Guava.pdf

    Google Guava 是一个由Google提供的开源Java库,它包含了许多强大的工具类和集合类,这些类可以帮助开发者更高效地编写Java代码。Guava的目标是提供一种更加简洁、优雅的方式来处理常见的编程任务,并且在很多情况下...

    Guava 工程项目包 有实例

    Guava 是一个由 Google 开发并维护的 Java 库,它提供了许多实用工具类和集合框架的增强功能,极大地丰富了 Java 平台的标准库。Guava 的目标是解决 Java 开发人员在日常工作中遇到的各种常见问题,提高开发效率和...

    guava-jch:Guava用户指南中文版以及部分原始翻译解析

    阅读优秀的代码也是十分有效的提升番石榴:Google的Java核心类库 Guava是Google提供的一组Java核心类库,包括新的集合框架(例如multimap和multiset),不可变集合(不可变集合),图形库(图形库),函数(函数类型...

    google-guava.jar

    《谷歌Guava库详解》 谷歌Guava,全称为Google Guava,是Google推出的一款Java库,它包含一系列基础工具类,旨在简化Java开发工作,提高代码效率和可维护性。Guava的核心特性包括集合框架、缓存、原始类型支持、...

    guava-learn:guava 学习代码库,和对 guava 源码的学习

    Guava是Google开发的一个Java库,它提供了许多基础工具,如集合、缓存、原生类型支持、并发库、字符串处理、I/O等。Guava的目的是为了简化Java开发,提高代码质量和性能。本篇文章将深入探讨Guava的学习,包括最佳...

    Getting Started with Google Guava

    1. **集合框架增强**:Guava提供了如Multiset(多集合)、Multimap(多映射)和Table(表格)等高级数据结构,它们在处理复杂数据关系时特别有用。例如,Multiset允许元素有多个计数,而Multimap则允许一个键对应多...

Global site tag (gtag.js) - Google Analytics