Google Guava:函数式编程
在guava中存在一个com.google.common.base.Functions和com.google.common.base.Function类,利用他们,可以为集合类的转换提供自定义的转换函数。
首先我们看第一个例子,简单的自定义一个函数,然后用于一个简单的list对象的转换,代码如下:
初始化的代码:
static class School {
public String name;
public String location;
public static School newSchool(String name,String loc) {
School s = new School();
s.name = name;
s.location = loc;
return s;
}
}
List<School> schools;
@Before
public void init() {
schools = Lists.newLinkedList();
schools.addAll(Arrays.asList(School.newSchool("xigongda", "xi'an"),
School.newSchool("xijiaoda", "chengdu")));
}
@After
public void end() {
if(schools!=null) {
schools.clear();
}
}
下面开始第一个测试,我们将定义一个功能函数,然后在集合转换的时候使用它,最后测试结果,如下:
@Test
public void testFunctions1() {
//测试一个功能函数,用于集合转换
//1、定义一个功能函数,用于将School类转为地址字符串
Function<School,String> f = new Function<School,String>() {
@Override
public String apply(School s) {
if(s==null) {
return "";
}
return s.location;
}
};
//2、开始转换集合
Collection<String> locationList = Collections2.transform(schools, f);
//3、验证结果含有期望的值
assertThat(locationList, hasItems("xi'an","chengdu"));
}
这个比较简单,但是可能有些情况需要将不同的函数组合起来,进行合并运算,比如先执行一个转换,然后再执行一个大小写的转换,这个情况guava也是支持的,代码如下:
@Test
public void testFunctions2() {
//测试组合两个功能函数,用于集合转换
//1、定义第一个功能函数,用于将School类转为地址字符串,即:f(school)=location
Function<School,String> f = new Function<School,String>() {
@Override
public String apply(School s) {
if(s==null) {
return "";
}
return s.location;
}
};
//2、定义第二个功能函数,用于转换大小写,即:f(string)=STRING
Function<String,String> f2 = new Function<String,String>() {
@Override
public String apply(String s) {
if(s==null) {
return "";
}
return s.toUpperCase();
}
};
//3、定义函数组合,将对每个元素执行f,然后对结果进行f2计算,即:result=f2(f(school))
Function<School,String> f3 = Functions.compose(f2, f);
//4、开始转换集合
Collection<String> locationList = Collections2.transform(schools, f3);
//5、验证结果含有期望的值
assertThat(locationList, hasItems("XI'AN","CHENGDU"));
}
最后,guava还支持预定义的基于map的映射函数,即给他一个Map,他会按照Map的key/value定义,将集合的元素逐个和key匹配,如果发现匹配的,则返回value,代码如下:
@Test
public void testForMap() {
//测试对map的预定义函数,即使用forMap构造的函数,在集合转换的时候会被自动映射
//1、定义映射表
Map<School,String> m = Maps.newHashMap();
m.put(schools.get(0), "hangtian");
//m.put(schools.get(1), "tielu");
//2、定义函数
Function<School,String> f = Functions.forMap(m,"UNKNOWN");
//3、转换,此时会对schools中的每个元素调用映射进行转换,得到学校属性
Collection<String> types = Collections2.transform(schools, f);
//4、验证
assertThat(types, hasItems("hangtian","UNKNOWN"));
}
分享到:
相关推荐
谷歌的Guava库是Java开发中的一个非常重要的开源项目,它提供了一系列的高效、实用的工具类,大大简化了常见的编程任务。Guava的核心特性包括集合框架、缓存、原生类型支持、并发库、字符串处理、I/O操作等。这个...
4. **函数式编程**:Guava引入了函数接口(Function、Predicate等)和Optional类,这使得Java代码可以更接近函数式编程风格,提高代码的可读性和可维护性。 5. **字符串处理**:Guava的Strings类包含一系列静态方法...
【Google Guava对函数式编程的增强】 Google Guava是一个Java库,提供了许多工具类和集合框架,其中也包含了对函数式编程的支持。例如,Guava的`com.google.common.base.Function`接口和`...
3. **函数式编程**:Guava引入了Function、Predicate和Transformer等接口,支持函数式编程风格,便于代码的编写和测试。 4. **缓存机制**:Guava提供了本地缓存实现,可以帮助开发者轻松地在应用程序中构建高效的...
Guava库虽然并非专门为了加密设计,但它包含了一组强大的实用工具,包括字符串处理、数学运算、并发编程等,也提供了一些关于哈希和摘要计算的功能。在Guava中,我们可以找到`com.google.common.hash`包,这个包下的...
4. **函数式编程**:Guava 支持函数式编程风格,提供了 Function、Predicate 等接口,可以用于数据转换和过滤。 5. **字符串处理**:Guava 提供了各种字符串工具,如 Joiner、Splitter 和 CharMatcher,可以更方便...
Google Guava 是一个广泛使用的 Java 库,它提供了一系列现代编程实用工具,旨在简化常见的编程任务。Guava 提供了集合框架的扩展、并发支持、缓存机制、字符串处理工具、I/O 工具以及许多其他功能。这个官方教程将...
《深入理解Google Guava:函数式接口与EventBus解析》 Google Guava是Google推出的一个开源库,它为Java开发人员提供了一套丰富的工具类和集合框架,极大地提高了开发效率和代码质量。本资料主要围绕Guava中的两个...
Guava 引入了函数式编程的概念,包括 Function、Predicate 和 Transformer 等接口,这些接口可以作为参数传递,实现高阶函数。这使得代码更加模块化,更容易进行单元测试。 **8. 范围和区间** Guava 提供了 Range ...
Guava是Google开发的一个核心库,它为Java平台提供了许多实用工具类,极大地简化了常见的编程任务。在标题和描述中提到的"guava-23.0.zip"是一个包含Guava库版本23.0的压缩文件,而"guava.jar"则是Guava库的JAR文件...
《Getting Started with Google Guava》是Bill Bejeck所著,旨在帮助Java开发者...总之,《Getting Started with Google Guava》为那些希望在Java编程中达到更加高效和简洁目的的开发者,提供了一个非常有价值的参考。
此外,Guava还提供了Predicates(谓词)、Combinators(组合器)和Comparators(比较器)等工具,进一步增强了函数式编程的能力。 六、I/O工具 Guava的IO模块提供了流式处理的读写操作,如CharSource和ByteSource...
随着Guava的更新迭代,更多的特性如流(Streams)、函数式编程等已经被添加进来,学习这个版本的教程可以帮助理解Guava的基本概念,但建议同时关注最新版本的文档以获取最全面的信息。 **学习资源** "Google Guava ...
Google Guava是一个由Google开发并维护的开源Java库,它为Java开发者提供了许多实用的工具类和集合框架,极大地简化了常见的编程任务。这个框架包含了多个模块,如基础(base)、缓存(cache)、I/O(io)以及并发...
在Java编程中,Google Guava库是一个不可或缺的工具集合,它提供了大量的高效、实用的类和方法,极大地提升了开发效率。本次我们将聚焦于Guava中的`Ints`模块,通过分析`com.google.guava_1.6.0.jar.zip`这个压缩包...
《谷歌Guava库详解》 谷歌Guava,全称为Google Guava,是Google推出的一款Java库,它包含一系列基础工具类,旨在简化Java开发工作,提高代码效率和可维护性。Guava的核心特性包括集合框架、缓存、原始类型支持、...
在Java并行编程中,Google的Guava库提供了一套强大的工具,极大地丰富了Future接口的功能,尤其是ListenableFuture接口及其相关的扩展。这些工具使得异步计算的管理和处理变得更加灵活和高效。 ListenableFuture是...
- **函数式编程**:Guava 引入了 Function 和 Predicate 等接口,促进了函数式编程风格在 Java 中的应用。 - **并发**:Guava 提供了更高级别的并发工具,如 ListenableFuture、Service 等,简化了异步编程和系统...
Guava是Google为Java平台设计的一个开源库,它极大地扩展了Java的标准库,尤其是在集合、缓存、并发和I/O等方面。Guava的核心特性包括: 1. **集合框架增强**:Guava提供了丰富的集合类,如Multiset(多集)、...