1. Maven Dependency
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.fool.guava</groupId> <artifactId>guava</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>guava</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project>
2.Book.java
package org.fool.guava.collections.map; import java.util.Date; import com.google.common.base.MoreObjects; public class Book { private String isbn; private String name; private String author; private Date publishDate; public Book(String isbn, String name, String author, Date publishDate) { this.isbn = isbn; this.name = name; this.author = author; this.publishDate = publishDate; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Date getPublishDate() { return publishDate; } public void setPublishDate(Date publishDate) { this.publishDate = publishDate; } @Override public String toString() { return MoreObjects.toStringHelper(this).add("ISBN", this.getIsbn()).add("name", this.getName()) .add("author", this.getAuthor()).add("publish date", this.getPublishDate()).toString(); } }
3. MapTest.java
package org.fool.guava.collections.map; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; public class MapTest { private Book book1; private Book book2; private Book book3; private Book book4; private List<Book> bookList; @Before public void setUp() throws Exception { book1 = new Book("9787121281556", "Hadoop in Action", "LiuBei", new Date()); book2 = new Book("9787121281557", "Spark in Action", "GuanYu", new Date()); book3 = new Book("9787121281558", "Storm in Action", "ZhangFei", new Date()); book4 = new Book("9787121281559", "Kafka in Action", "ZhaoYun", new Date()); bookList = Lists.newArrayList(book1, book2, book3, book4); } @Test public void testUniqueIndex() { ImmutableMap<String, Book> bookMap = Maps.uniqueIndex(bookList.iterator(), new Function<Book, String>() { @Override public String apply(Book input) { return input.getIsbn(); } }); bookMap.forEach((k, v) -> System.out.println(Joiner.on(" ").join(k, v))); } @Test public void testArrayListMultiMap() { Multimap<String, String> multiMap = ArrayListMultimap.create(); multiMap.put("Country Shu", "LiuBei"); multiMap.put("Country Shu", "GuanYu"); multiMap.put("Country Shu", "ZhangFei"); multiMap.put("Country Shu", "ZhangFei"); multiMap.put("Country Wei", "CaoCao"); multiMap.put("Country Wei", "XunYu"); multiMap.put("Country Wei", "GuoJia"); List<String> valueList = Lists.newArrayList("LiuBei", "GuanYu", "ZhangFei", "ZhangFei"); assertEquals(multiMap.get("Country Shu"), valueList); Map<String, Collection<String>> map = multiMap.asMap(); map.forEach((k, v) -> System.out.println(Joiner.on(" ").join(k, v))); } @Test public void testHashMultimap() { Multimap<String, String> multiMap = HashMultimap.create(); multiMap.put("Country Shu", "LiuBei"); multiMap.put("Country Shu", "GuanYu"); multiMap.put("Country Shu", "ZhangFei"); multiMap.put("Country Shu", "ZhangFei"); assertThat(multiMap.size(), equalTo(3)); multiMap.asMap().forEach((k, v) -> System.out.println(Joiner.on(" ").join(k, v))); } @Test public void testBiMapForcePut() { BiMap<String, String> biMap = HashBiMap.create(); biMap.put("1", "LvBu"); biMap.forcePut("2", "LvBu"); assertThat(biMap.containsKey("1"), equalTo(false)); assertThat(biMap.containsKey("2"), equalTo(true)); } @Test public void testBiMapInverse() throws Exception { BiMap<String, String> biMap = HashBiMap.create(); biMap.put("1", "LvBu"); biMap.put("2", "DiaoChan"); assertThat(biMap.get("1"), equalTo("LvBu")); assertThat(biMap.get("2"), equalTo("DiaoChan")); BiMap<String, String> inverseMap = biMap.inverse(); assertThat(inverseMap.get("LvBu"), equalTo("1")); assertThat(inverseMap.get("DiaoChan"), equalTo("2")); } }
相关推荐
- **Immutable Collections**:不可变的集合类,确保一旦创建就不能被修改,提供线程安全。 - **BiMap**:双向映射,允许在键和值之间进行双向查找。 - **Table**:二维表格数据结构,用于存储键-键对的数据。 2...
Google Collections(Guava)库不仅限于`Maps`模块,还包括`Lists`、`Sets`、`Multisets`、`Iterators`等多个子模块,它们都提供了丰富的功能和优化,使得Java编程更加简洁和高效。在实际开发中,熟练掌握并运用这些...
New collection types(新集合类型):JDK collections 没有的一些集合类型,主要有:multisets,multimaps,tables, bidirectional maps等等 3. Powerful collection utilities(强大的集合工具类): java.util....
总之,Google Collections(现在的 Guava)为 Java 开发者提供了大量实用工具和集合扩展,提高了代码的可读性、效率和安全性。无论是进行简单的数据操作还是设计复杂的系统,这个库都是一把不可或缺的利器。
在Android开发中,`google-collections-1.0.jar`(现在通常被称为`guava.jar`,版本可能已更新至29.x或更高)是一个非常重要的依赖。它可以帮助开发者编写更简洁、更安全的代码,提高代码的可读性和可维护性。尤其是...
Google Collections Library在2007年首次发布,后来发展成为Apache Commons Lang的子项目,最终演变为现在的Guava库,它是Google Java开发工具包的一部分。 在压缩包子文件的文件名称列表中,我们看到"google-...
List<String> unmodifiableList = Lists.newArrayList(Collections.unmodifiableList(originalList)); ``` 除了`newArrayList`,`com.google.common.collect`包还提供了许多其他强大的工具,如`ImmutableList`、`...
谷歌集合框架还引入了丰富的单元测试工具,如`Iterables`, `Collections2`, `Maps`等,帮助开发者更好地验证集合操作的正确性。此外,它还优化了集合的性能,例如通过使用轻量级数据结构和高效的算法,减少了内存...
总结来说,Java提供了多种方式来对Map按值进行排序,包括使用TreeMap、Collections.sort、Stream API以及Guava库。选择哪种方法取决于项目需求和个人喜好,但在Java 8及更高版本中,Stream API通常被认为是最简洁和...
- `Lists`和`Maps`:提供了丰富的集合操作,如创建不可变列表、映射,以及各种集合操作。 3. **Java Util**: Java标准库中的`java.util`包也包含了一些基础工具类。 - `Arrays`:提供数组操作,如排序`sort()`...
Map和Set是Java集合框架(Collections Framework)的关键部分,用于存储和操作数据。现在,我们将深入探讨这两种数据结构以及它们在实际编程中的应用。 首先,让我们了解**Set**。Set接口在Java中继承自Collection...
16. **Collections.unmodifiable*()**:创建不可修改的集合视图,如Lists、Sets和Maps。 17. **List.subList()**:获取列表的子列表,不改变原列表。 18. **Stream API**:Java 8引入,用于处理集合数据的函数式...
4. **Apache Commons**: Apache Commons是Apache软件基金会的一个项目,提供了许多实用的Java工具类,如IO、Lang、Collections等模块,极大地丰富了Java的标准库。 5. **Log4j**: 一个流行的日志记录框架,用于在...
例如,Apache Commons Lang的`StringUtils`类提供了更多的字符串处理功能,Guava的`Preconditions`用于参数检查,`Lists`、`Maps`和`Sets`提供了集合操作的便利方法。 5. **IO工具类**: 在`java.io`包中,有许多...
2. **Guava**: Google的Guava库提供了大量的Java增强功能,比如`Preconditions` 类用于参数检查,防止空指针异常;`Lists`, `Sets`, `Maps` 提供了丰富的集合操作方法;`Strings` 类提供了一流的字符串处理能力,如 ...
例如,Guava的`Collections2`, `Maps`, `Sets`等类提供了丰富的集合处理功能。 4. **IO流操作**:在处理文件或网络数据时,`FileUtils`, `IOUtils`(Apache Commons IO)等工具类可以帮助读写文件,复制流,关闭...
此外,Guava库提供了更丰富的工具类,如Preconditions、Lists、Maps等,提高了开发效率。 以上五个部分构成了Java编程的基础,掌握这些知识点能够帮助开发者构建高效、稳定的系统。在实际工作中,结合具体需求,...