纯静态网站怎样,wordpress+悬浮+登录,广州菜谱制作公司,游戏公司做网站设计赚钱吗guava 集合转换Groovy的便利之一是能够通过Groovy的闭包支持轻松地对集合执行过滤和转换操作。 Guava将对集合的过滤和转换引入标准Java#xff0c;这是本文的主题。 Guava的Collections2类具有两个公共方法#xff0c;这两个方法都是静态的。 方法filter#xff08;Collec… guava 集合转换 Groovy的便利之一是能够通过Groovy的闭包支持轻松地对集合执行过滤和转换操作。 Guava将对集合的过滤和转换引入标准Java这是本文的主题。 Guava的Collections2类具有两个公共方法这两个方法都是静态的。 方法filterCollectionPredicate和transformCollectionFunction的功能含义是分别对给定的集合执行过滤和转换。 要过滤或转换的集合是每个静态方法的第一个参数。 过滤函数的第二个参数是Guava的Predicate类的实例。 转换函数的第二个参数是Guava的Function类的实例。 这篇文章的其余部分展示了如何将所有这些结合在一起以过滤和转换Java集合。 使用番石榴过滤收藏 使用番石榴过滤集合非常简单。 下面的代码片段演示了一个简单的示例。 提供了一个String Set 未在代码片段中显示但在代码后的输出中显而易见并且仅对以大写字母“ J”开头的条目过滤了所提供的Set 。 这是通过使用Java正则表达式支持和Guava的Predicates.containsPatternString来完成的 但是还可以指定其他类型的Predicate 。 过滤以J开头的字符串 /*** Demonstrate Guavas Collections2.filter method. Filter String beginning * with letter J.*/public static void demonstrateFilter(){printHeader(Collections2.filter(Collection,Predicate): J Languages);final SetString strings buildSetStrings();out.println(\nOriginal Strings (pre-filter):\n\t strings);final CollectionString filteredStrings Collections2.filter(strings, Predicates.containsPattern(^J));out.println(\nFiltered Strings:\n\t filteredStrings);out.println(\nOriginal Strings (post-filter):\n\t strings);} 接下来显示运行上述方法的输出。 此输出显示冗长的编程语言列表这些列表构成了buildSetStrings()返回的原始String Set 并显示了仅包含以J开头的那些编程语言的过滤器调用的结果。 用番石榴改造收藏 使用Guava转换集合类似于语法过滤但使用Function来指定如何将源集合条目“转换”为输出集合而不是使用Predicate来确定要保留哪些条目。 以下代码段演示了如何将给定集合中的条目转换为自身的大写版本。 将条目转换为大写 /*** Demonstrate Guavas Collections2.transform method. Transform input* collections entries to uppercase form.*/public static void demonstrateTransform(){printHeader(Collections2.transform(Collection,Function): Uppercase);final SetString strings buildSetStrings();out.println(\nOriginal Strings (pre-transform):\n\t strings);final CollectionString transformedStrings Collections2.transform(strings, new UpperCaseFunctionString, String());out.println(\nTransformed Strings:\n\t transformedStrings);out.println(\nOriginal Strings (post-transform):\n\t strings);} 上面的转换代码片段使用了一个名为UpperCaseFunction的类但是在Guava API文档中找不到该类。 这是定义的自定义类如下面的代码清单所示。 UpperCaseFunction.java package dustin.examples;import com.google.common.base.Function;/*** Simple Guava Function that converts provided objects toString() representation* to upper case.* * author Dustin*/
public class UpperCaseFunctionF, T implements FunctionF, T
{Overridepublic Object apply(Object f){return f.toString().toUpperCase();}
} 接下来显示运行使用UpperCaseFunction类的转换代码段的输出。 上面的代码段显示了专用于使用Guava过滤和转换集合条目的方法。 接下来显示主类的完整代码清单。 GuavaCollections2.java package dustin.examples;import static java.lang.System.out;import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;/*** Class whose sole reason for existence is to demonstrate Guavas Collections2* class.* * author Dustin*/
public class GuavaCollections2
{/*** Provides a Set of Strings.* * return Set of strings representing some programming languages.*/private static SetString buildSetStrings(){final SetString strings new HashSetString();strings.add(Java);strings.add(Groovy);strings.add(Jython);strings.add(JRuby);strings.add(Python);strings.add(Ruby);strings.add(Perl);strings.add(C);strings.add(C);strings.add(C#);strings.add(Pascal);strings.add(Fortran);strings.add(Cobol);strings.add(Scala);strings.add(Clojure);strings.add(Basic);strings.add(PHP);strings.add(Flex/ActionScript);strings.add(JOVIAL);return strings;}/*** Demonstrate Guavas Collections2.filter method. Filter String beginning * with letter J.*/public static void demonstrateFilter(){printHeader(Collections2.filter(Collection,Predicate): J Languages);final SetString strings buildSetStrings();out.println(\nOriginal Strings (pre-filter):\n\t strings);final CollectionString filteredStrings Collections2.filter(strings, Predicates.containsPattern(^J));out.println(\nFiltered Strings:\n\t filteredStrings);out.println(\nOriginal Strings (post-filter):\n\t strings);}/*** Demonstrate Guavas Collections2.transform method. Transform input* collections entries to uppercase form.*/public static void demonstrateTransform(){printHeader(Collections2.transform(Collection,Function): Uppercase);final SetString strings buildSetStrings();out.println(\nOriginal Strings (pre-transform):\n\t strings);final CollectionString transformedStrings Collections2.transform(strings, new UpperCaseFunctionString, String());out.println(\nTransformed Strings:\n\t transformedStrings);out.println(\nOriginal Strings (post-transform):\n\t strings);}/*** Print a separation header including the provided text.* * param headerText Text to be included in separation header.*/private static void printHeader(final String headerText){out.println(\n);out.println( headerText);out.println();}/*** Main function for demonstrating Guavas Collections2 class.* * param arguments */public static void main(final String[] arguments){demonstrateFilter();demonstrateTransform();}
} 在结束本文之前这里需要注意一个重要的注意事项。 在Collections2类上定义的这两种方法在其Javadoc文档中均包含有关其使用的警告。 两种方法都提供了被视为原始集合“实时视图”的集合因此“对一个集合的更改会影响另一个集合”。 例如从源集合中删除元素类似地将其从转换后的集合中删除。 每种方法的文档也警告说即使源集合是可序列化的和/或线程安全的也不会返回可序列化或线程安全的集合。 结论 Guava使使用Java过滤集合和转换集合条目变得更加容易。 尽管执行类似操作的代码可能不像Groovy那样简洁但是它比不使用Guava的Collections2类编写直接Java代码要好。 Java集合可以使用Collections2.filter(Collection,Predicate)进行过滤也可以使用Collections2.transform(Collection,Function) 。 参考在Inspired by Actual Events博客上我们的JCG合作伙伴 Dustin Marx 用Guava的Collections2过滤和转换Java集合 。 翻译自: https://www.javacodegeeks.com/2012/11/guavas-collections2-filtering-and-transforming-java-collections.htmlguava 集合转换