`

Guava Collections - Maps

 
阅读更多

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"));
	}

}

 

分享到:
评论

相关推荐

    google guava23.5

    - **Immutable Collections**:不可变的集合类,确保一旦创建就不能被修改,提供线程安全。 - **BiMap**:双向映射,允许在键和值之间进行双向查找。 - **Table**:二维表格数据结构,用于存储键-键对的数据。 2...

    google-collections jar包

    Google Collections(Guava)库不仅限于`Maps`模块,还包括`Lists`、`Sets`、`Multisets`、`Iterators`等多个子模块,它们都提供了丰富的功能和优化,使得Java编程更加简洁和高效。在实际开发中,熟练掌握并运用这些...

    Guava 16.0 API (CHM格式)

    New collection types(新集合类型):JDK collections 没有的一些集合类型,主要有:multisets,multimaps,tables, bidirectional maps等等  3. Powerful collection utilities(强大的集合工具类): java.util....

    google-collections.zip

    总之,Google Collections(现在的 Guava)为 Java 开发者提供了大量实用工具和集合扩展,提高了代码的可读性、效率和安全性。无论是进行简单的数据操作还是设计复杂的系统,这个库都是一把不可或缺的利器。

    google common jar包

    在Android开发中,`google-collections-1.0.jar`(现在通常被称为`guava.jar`,版本可能已更新至29.x或更高)是一个非常重要的依赖。它可以帮助开发者编写更简洁、更安全的代码,提高代码的可读性和可维护性。尤其是...

    google-collect-1.0.jar.zip

    Google Collections Library在2007年首次发布,后来发展成为Apache Commons Lang的子项目,最终演变为现在的Guava库,它是Google Java开发工具包的一部分。 在压缩包子文件的文件名称列表中,我们看到"google-...

    google-collect

    谷歌集合框架还引入了丰富的单元测试工具,如`Iterables`, `Collections2`, `Maps`等,帮助开发者更好地验证集合操作的正确性。此外,它还优化了集合的性能,例如通过使用轻量级数据结构和高效的算法,减少了内存...

    com.google.common.collect jar包

    List&lt;String&gt; unmodifiableList = Lists.newArrayList(Collections.unmodifiableList(originalList)); ``` 除了`newArrayList`,`com.google.common.collect`包还提供了许多其他强大的工具,如`ImmutableList`、`...

    Java Map 按值排序

    总结来说,Java提供了多种方式来对Map按值进行排序,包括使用TreeMap、Collections.sort、Stream API以及Guava库。选择哪种方法取决于项目需求和个人喜好,但在Java 8及更高版本中,Stream API通常被认为是最简洁和...

    java开发中常用的通用工具类.rar

    - `Lists`和`Maps`:提供了丰富的集合操作,如创建不可变列表、映射,以及各种集合操作。 3. **Java Util**: Java标准库中的`java.util`包也包含了一些基础工具类。 - `Arrays`:提供数组操作,如排序`sort()`...

    estrutura_dados_ifpe_maps_sets

    Map和Set是Java集合框架(Collections Framework)的关键部分,用于存储和操作数据。现在,我们将深入探讨这两种数据结构以及它们在实际编程中的应用。 首先,让我们了解**Set**。Set接口在Java中继承自Collection...

    28个java常用的工具类

    16. **Collections.unmodifiable*()**:创建不可修改的集合视图,如Lists、Sets和Maps。 17. **List.subList()**:获取列表的子列表,不改变原列表。 18. **Stream API**:Java 8引入,用于处理集合数据的函数式...

    常用的一些jar包

    4. **Apache Commons**: Apache Commons是Apache软件基金会的一个项目,提供了许多实用的Java工具类,如IO、Lang、Collections等模块,极大地丰富了Java的标准库。 5. **Log4j**: 一个流行的日志记录框架,用于在...

    java工具类

    例如,Apache Commons Lang的`StringUtils`类提供了更多的字符串处理功能,Guava的`Preconditions`用于参数检查,`Lists`、`Maps`和`Sets`提供了集合操作的便利方法。 5. **IO工具类**: 在`java.io`包中,有许多...

    工作11年总结的常用java工具类,上百种方法,开发中绝对用得到

    2. **Guava**: Google的Guava库提供了大量的Java增强功能,比如`Preconditions` 类用于参数检查,防止空指针异常;`Lists`, `Sets`, `Maps` 提供了丰富的集合操作方法;`Strings` 类提供了一流的字符串处理能力,如 ...

    工具类

    例如,Guava的`Collections2`, `Maps`, `Sets`等类提供了丰富的集合处理功能。 4. **IO流操作**:在处理文件或网络数据时,`FileUtils`, `IOUtils`(Apache Commons IO)等工具类可以帮助读写文件,复制流,关闭...

    Java-notes:Java语言笔记

    此外,Guava库提供了更丰富的工具类,如Preconditions、Lists、Maps等,提高了开发效率。 以上五个部分构成了Java编程的基础,掌握这些知识点能够帮助开发者构建高效、稳定的系统。在实际工作中,结合具体需求,...

Global site tag (gtag.js) - Google Analytics