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.Person.java
package org.fool.guava.collections.list; import com.google.common.base.MoreObjects; public class Person { private String firstname; private String lastname; private int age; private String sex; public Person(String firstname, String lastname, int age, String sex) { this.firstname = firstname; this.lastname = lastname; this.age = age; this.sex = sex; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return MoreObjects.toStringHelper(this).add("firstname", this.getFirstname()) .add("lastname", this.getLastname()).add("age", this.getAge()).add("sex", this.getSex()).toString(); } }
3.FluentIterableTest.java
package org.fool.guava.collections.list; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; import java.util.List; import org.junit.Before; import org.junit.Test; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Predicate; import com.google.common.collect.FluentIterable; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; public class FluentIterableTest { private Person person1; private Person person2; private Person person3; private Person person4; private List<Person> personList; @Before public void setUp() throws Exception { person1 = new Person("Liu", "Bei", 30, "F"); person2 = new Person("Guan", "Yu", 32, "M"); person3 = new Person("Zhang", "Fei", 31, "F"); person4 = new Person("Zhao", "Yun", 33, "M"); personList = Lists.newArrayList(person1, person2, person3, person4); } @Test public void testFilter() { FluentIterable<Person> personsFilteredByAge = FluentIterable.from(personList).filter(new Predicate<Person>() { @Override public boolean apply(Person input) { return input.getAge() > 31; } }); assertThat(Iterables.contains(personsFilteredByAge, person1), equalTo(false)); assertThat(Iterables.contains(personsFilteredByAge, person2), equalTo(true)); assertThat(Iterables.contains(personsFilteredByAge, person3), equalTo(false)); assertThat(Iterables.contains(personsFilteredByAge, person4), equalTo(true)); } @Test public void testTransform() { List<String> transformedPersonList = FluentIterable.from(personList).transform(new Function<Person, String>() { @Override public String apply(Person input) { return Joiner.on("#").join(input.getFirstname(), input.getLastname(), input.getAge()); } }).toList(); assertThat(transformedPersonList.get(1), equalTo("Guan#Yu#32")); assertThat(transformedPersonList.get(3), equalTo("Zhao#Yun#33")); } @Test public void testPartition() { List<List<Person>> subList = Lists.partition(personList, 2); subList.forEach(p -> System.out.println(p)); subList = Lists.partition(personList, 3); subList.forEach(p -> System.out.println(p)); } }
相关推荐
- **Immutable Collections**:不可变的集合类,确保一旦创建就不能被修改,提供线程安全。 - **BiMap**:双向映射,允许在键和值之间进行双向查找。 - **Table**:二维表格数据结构,用于存储键-键对的数据。 2...
除了以上提到的功能,Guava Collections 还包含许多其他实用工具,如 Predicates、Functions 和 Lists 等,帮助开发者写出更简洁、更可读的代码。这些经过精心设计和充分测试的 API,大大提升了开发效率,减少了潜在...
Guava 的 Iterables 和 Collections2 类提供了类似 Stream 的操作,但语法和功能上有所不同。例如,以下代码使用 Guava 过滤和转换列表: ```java List<String> names = Lists.newArrayList("Alice", "Bob", ...
List<Integer> lengths = Lists.transform(Arrays.asList("abc", "def"), lengthExtractor); ``` 以上只是 Guava 30.1.1 版本中的一部分核心功能,实际使用中还有许多其他实用工具类,如 `Range`, `EventBus`, `...
Google Collections(Guava)库不仅限于`Maps`模块,还包括`Lists`、`Sets`、`Multisets`、`Iterators`等多个子模块,它们都提供了丰富的功能和优化,使得Java编程更加简洁和高效。在实际开发中,熟练掌握并运用这些...
总之,Google Collections(现在的 Guava)为 Java 开发者提供了大量实用工具和集合扩展,提高了代码的可读性、效率和安全性。无论是进行简单的数据操作还是设计复杂的系统,这个库都是一把不可或缺的利器。
guava-collect-base:收集的基类(Collections2,Lists,Iterables ...)-大小约75Kb请注意,与不可变相关的类将出现在另一个包中 ...更多 执照 Copyright 2015 Romain Piel Licensed under the Apache License, ...
1. **集合框架增强**:Guava 提供了丰富的集合类,如 Multiset(多集合)、Multimap(多映射)、Immutable collections(不可变集合)等,这些集合在功能和性能上都优于 Java 标准库中的集合。 2. **缓存**:Guava ...
- **Immutable collections**: 提供了不可变的List、Set和Map实现,保证了线程安全,适合于创建常量或配置数据。 - **Table**: 一个二维的键值对集合,可以将两个键关联起来,用于存储表格类型的数据。 2. **并发...
6. **并发工具**:Guava包含了如Lists.newCopyOnWriteArrayList、Sets.newConcurrentHashSet等线程安全的集合实现,以及CountDownLatch、CyclicBarrier、Semaphore等并发控制工具,为多线程编程提供了便利。...
List<String> stringList = Collections2.transform(strings, new Function, String>() { @Override public String apply(Integer input) { return input.toString(); } }); ``` 在Java 8之后,我们可以使用...
**Guava教程1:使用Google Collections** 在Java开发中,Google Collections(现称为Guava库)是一个非常重要的工具集,它极大地丰富了标准Java库的功能,提供了许多实用的数据结构、集合操作、并发工具以及字符串...
这个"google-collections-1.0.jar"文件就是谷歌Common库的一个早期版本,它在2007年首次发布,是Google Collections Library的前身,后来演变为Guava库。 在"google-collections-1.0.jar"中,我们可以找到许多关键...
Guava的ImmutableCollections(不可变集合)是线程安全且不可修改的,适用于创建常量或配置类。 其次,Guava的缓存功能允许开发者轻松地在应用程序中实现本地缓存策略,提高性能并减少对远程服务的调用。...
Guava的`Lists.partition()`方法允许我们将一个大列表分割成多个小列表,每个小列表的大小可以指定。这对于批量处理大列表,或者在多线程环境中并行处理数据非常有帮助。例如,如果我们有一个包含100个元素的列表,...
List<String> unmodifiableList = Lists.newArrayList(Collections.unmodifiableList(originalList)); ``` 除了`newArrayList`,`com.google.common.collect`包还提供了许多其他强大的工具,如`ImmutableList`、`...
首先,Google Collections库,现已被更名为Guava,是Google提供的一套强大的Java工具类库。它包含了大量对Java集合框架的扩展,如Multiset、Multimap、ImmutableList等,还有许多实用的函数式编程工具,如Predicates...
- **Collections2**、**Lists**、**Sets**等工具类:提供了许多便利的静态方法,如排序、转换、过滤等。 4. **学习与实践** 学习Google Collections 1.0,开发者可以深入理解如何利用这些高级数据结构和工具来...
它们在很多场景下能够替代Java标准库中的`Collections.unmodifiable*`方法,提供更强的类型安全性和性能。 使用不可变集合有以下好处: - **线程安全**:不可变对象天生就是线程安全的,可以减少在多线程环境中的...
Guava的Iterables、Lists和Collections2等类提供了丰富的操作序列的方法,如filter、transform和apply等。 7. **事件监听** Guava的EventBus是一种简单的发布-订阅事件总线,可以方便地实现组件间的松耦合通信。 ...