guava ---只读,过滤,转换,组合,约束

来源:互联网 发布:淘宝规则虚假交易 编辑:程序博客网 时间:2024/05/17 23:39

guava —只读,过滤,转换,组合,约束


只读

相比较Collections中的只读方法 , 不存在原先的改变的情况 , 所以这样更安全;

代码如下

package club.dohacker.guava;import java.util.List;import com.google.common.collect.ImmutableList;/** * 组合函数式编程 * @author Administrator * */public class Test3 {    public static void main(String[] args) {         //获得一个不可只有只读特性的list             List<String> list = ImmutableList.of("abc","def","ghi");//       java.lang.UnsupportedOperationException         list.add("b");    }}

过滤

创建一个Predicate 对象 , 后Collections2.filter()方法会将集合中每一个元素按照Predicate中的Predicate方法来过一遍就得到了过滤的结果
Collection col = Collections2.filter(Collection coll,Precicate pre);

代码如下所示

package club.dohacker.guava;import java.util.Collection;import java.util.List;import com.google.common.base.Predicate;import com.google.common.collect.Collections2;import com.google.common.collect.Lists;/** * 测试Guava中过滤器的使用 * @author Administrator * */public class Test1 {    @SuppressWarnings("unchecked")    public static void main(String[] args) {        //创建一个集合        List<String>  list = Lists.newArrayList("abc","asddsa","123321","123123");        //开始对集合中的数据元素开始过滤        Collection<String> col = Collections2.filter(list, new Predicate<String>(){            @Override            public boolean apply(String arg0) {                //开始创建怎样过滤的内容                if(new StringBuilder(arg0).reverse().toString().equals(arg0)){                    return true;                }                return false;            }        });      //输出已经过滤成功的容器中的对象        for(String temp : col){            System.out.println(temp);        }    }}

转换

将集合根据函数对象new Function() 中apply方法中具体操作 , 对集合中的每一个元素都进行一次转换的操作
Collection inte_col = Collections2.transform(Collection coll,Function function);

代码如下

package club.dohacker.guava;import java.util.Collection;import java.util.List;import com.google.common.base.Function;import com.google.common.collect.Collections2;import com.google.common.collect.Lists;/** * 测试转换的使用 * @author Administrator * */public class Test2 {   public static void main(String[] args) {     List<String> list = Lists.newArrayList("123","456","789");     //开始过滤    Collection<Integer> inte_col = Collections2.transform(list,new Function<String,Integer>(){        @Override        public Integer apply(String arg0) {            return Integer.parseInt(arg0);        }    });     //输出集合中的元素    for(Integer inte : inte_col){        System.out.println(inte);    }   }}

组合函数式编程

假设有函数f1,函数f2
则组合函数以后得 : f2(f1)
先进行函数1的功能 ,再进行函数2的功能

代码的如下

package club.dohacker.guava;import java.util.Collection;import java.util.List;import com.google.common.base.Function;import com.google.common.base.Functions;import com.google.common.collect.Collections2;import com.google.common.collect.Lists;public class Test4 {    public static void main(String[] args) {        List<String> list  = Lists.newArrayList("aasdasd","123456789","asasbdasd","asasd","as");        //函数1将  : 将里面长度大于5的都进行截取 , 获取长度小于等于5的字符串        Function<String,String> func1 = new Function<String,String>(){            @Override            public String apply(String arg0) {                if(arg0.length()>=5){                    return arg0.substring(0, 5);                }                return arg0;            }        };        //函数2将 : 将字符串转换成大写;        Function<String,String> func2 = new Function<String,String>(){            @Override            public String apply(String arg0) {            return arg0.toUpperCase();            }        };      //组合函数1 和 函数 2 获取一个函数将字符串经过截取以后再转换成大写的字符串        Function<String,String> func3  = Functions.compose(func1, func2);     //开始进行对集合的转换     Collection<String> coll = Collections2.transform(list,func3);     //输出     for(String temp:coll){        System.out.println(temp);      }    }}

约束

创建一个Constraint对象 , 实现其内部的checkElement 方法来完成检验
其内部需要使用Precondition 类中的某些方法来完成对参数的检验

代码如下

package club.dohacker.guava;import java.util.HashSet;import java.util.Set;import com.google.common.base.Preconditions;import com.google.common.collect.Constraint;import com.google.common.collect.Constraints;import com.google.common.collect.Sets;/** * 测试guava 中的 * @author Administrator * */public class Test5 {    public static void main(String args[]){  Constraint<String> cons = new Constraint<String>(){    public String checkElement(String arg0) {        //需要使用Precondition类中的方法来进行判断;        Preconditions.checkNotNull(arg0);        Preconditions.checkArgument(true);        return null;    }  };  HashSet<String> set = Sets.newHashSet();  Set<String> set_temp = Constraints.constrainedSet(set,cons);  //java.lang.NullPointerException  set_temp.add("aadsa"); System.out.print("a"); }}
原创粉丝点击