Guava增强for循环
2013-10-15 23:27
197 查看
Guava的前身是Google Collections,是Google开发出的一个开源Java常用类库,包含了一些集合的便捷操作API。本文通过一些常用的例子来剖析Guava的奇妙之处。
Guava是如何简化for循环的呢,直接上一段例子来说明:
如果想要将一个字符数组中字符的元素剔除并且用逗号隔开,原始做法:
Guava类库极度简化次操作,以一种函数式编程思想链式的调用方法简化了实现
Guava还有比着这强大的功能,闲话少说,下面介绍三种项目常用简化for循环的用法:
1. 将一个集合元素的某一个或多个字段组成一个新的集合:
用法:可以将集合里的每个对象拿出来对其进行操作,并将操作结果作为新集合的元素,返回产生的新集合。
2.筛选出集合中满足某些属性的对象
用法:在集合中找出满足某个条件的所有元素,返回一个满足条件的新集合
3.在集合中找到一个满足条件的对象
用法:在集合中找到第一个满足条件的元素,并且返回一个被Optional封装的对象,Optional对象可以避免开发人员没有判断是否为null而产生的空指针异常,是Guava提供用来包装任何对象的对象。
4. 在2和3的实例中,tryFind和filter方法都需要传一个Predicate的对象,这个对象是用来判断哪些符合条件的一个借口,需要自己实现,与此同时,Guava也提供了能够让多个条件并列或者同时满足的条件组合方法
用法:提供了 and(or)方法来组合一个判断条件,丰富了tryFind和filter的判断条件逻辑。
总而言之,Guava给for循环带来了飞跃性的改进,让糟糕的for与if,else的冗余组合变得简单易懂,让代码变得更优美,可读性更高,确实值得所有java开发者的学习和亲睐。
Guava是如何简化for循环的呢,直接上一段例子来说明:
如果想要将一个字符数组中字符的元素剔除并且用逗号隔开,原始做法:
for(int i = 0; i < array.length; i++){ if(array[i] != null){ result.append(array[i]).append(','); } }
Guava类库极度简化次操作,以一种函数式编程思想链式的调用方法简化了实现
String s = Joiner.on(“,”).skipNulls().join(array);
Guava还有比着这强大的功能,闲话少说,下面介绍三种项目常用简化for循环的用法:
private List<Dog> dogs = ImmutableList.of( new Dog("Jeff", 0.6f, MALE, new DateTime(2013, 9, 1, 0, 0, 0, 0)), new Dog("Vivian", 1f, FEMALE, new DateTime(2013, 1, 2, 0, 0, 0, 0)));//初始化数据
1. 将一个集合元素的某一个或多个字段组成一个新的集合:
public Collection getNameList { return Collections2.transform(dogs, new Function<Dog, String>() { @Override public String apply(Dog dog) { return dog.getName(); } }); }
用法:可以将集合里的每个对象拿出来对其进行操作,并将操作结果作为新集合的元素,返回产生的新集合。
2.筛选出集合中满足某些属性的对象
public Collection applyAge(final float from, final float to) { return Collections2.filter(dogs, new Predicate<Dog>() { @Override public boolean apply(Dog dog) { return dog.getAge() > from && dog.getAge() < to; } }); }
用法:在集合中找出满足某个条件的所有元素,返回一个满足条件的新集合
3.在集合中找到一个满足条件的对象
public Object getBirthdayApplyMonthDog(final int month) { Optional<Dog> optional = Iterables.tryFind(dogs, new Predicate<Dog>() { @Override public boolean apply(Dog dog) { return dog.getBirthday().getMonthOfYear() == month; } }); if (optional.isPresent()) { return optional; } else { return "not found"; } }
用法:在集合中找到第一个满足条件的元素,并且返回一个被Optional封装的对象,Optional对象可以避免开发人员没有判断是否为null而产生的空指针异常,是Guava提供用来包装任何对象的对象。
4. 在2和3的实例中,tryFind和filter方法都需要传一个Predicate的对象,这个对象是用来判断哪些符合条件的一个借口,需要自己实现,与此同时,Guava也提供了能够让多个条件并列或者同时满足的条件组合方法
public Object getFirstDogAppluAgeAndGender(float age, String gender) { Optional<Dog> optional = Iterables.tryFind(dogs, and(getApplyAge(age), applyGenderDog(gender))); if(optional.isPresent()) { return optional.get(); } return Optional.absent(); } private Predicate<Dog> getApplyAge(final float age) { return new Predicate<Dog>() { @Override public boolean apply(Dog dog) { return dog.getAge() > age; } }; }
用法:提供了 and(or)方法来组合一个判断条件,丰富了tryFind和filter的判断条件逻辑。
总而言之,Guava给for循环带来了飞跃性的改进,让糟糕的for与if,else的冗余组合变得简单易懂,让代码变得更优美,可读性更高,确实值得所有java开发者的学习和亲睐。
相关文章推荐
- Map和Map.Entry,增强for循环
- java例程练习(增强的for循环)
- Java增强for循环 (java中的冒号)
- 增强for循环的使用
- 黑马程序员_day17 (Collections-sort-max-替换翻转,集合转成数组,增强for循环,可变参数,静态导入)。
- js也有增强的for循环
- 黑马程序员_毕向东JAVA基础_集合(3)Map&Collections&Arrays&增强for循环
- Java基础-增强for循环
- 黑马程序员____基础加强____静态导入&可变参数&增强for循环
- 黑马程序员--增强for循环
- java5的静态导入与自动装箱拆箱,增强for循环
- java1.5以上增强的for循环 与foreach
- 黑马程序员--关于增强for循环
- 《黑马程序员》Myeclipse 介绍。。静态导入。。增强for循环
- Java1.5语法糖的味道--增强for循环
- Java5新特性之静态导入、可变参数、增强for循环、自动拆装箱
- 黑马程序员——高新技术---eclipse使用技巧、静态导入、可变参数、增强for循环、 自动拆装箱、枚举
- java的增强for循环
- Map知识点Utilities后续整理(关于Collections,Array,增强for循环)
- JDK5.0新特性-增强for循环