Guava学习

字符串处理

Joiner是连接器,Splitter是分割器,通常我们会把它们定义为static final,利用on生成对象后在应用到String进行处理,这是可以复用的。
对于Joiner,常用的方法是 跳过NULL元素:skipNulls() / 对于NULL元素使用其他替代useForNull(String)
对于Splitter,常用的方法是: trimResults()/omitEmptyStrings()。注意拆分的方式,有字符串,还有正则,还有固定长度分割

        /**
     * 连接器
     */
    private static final Joiner joiner = Joiner.on(",").skipNulls();
    /**
     * 分割器
     */
    private static final Splitter splitter = Splitter.on(",").trimResults().omitEmptyStrings();


    public static void main(String[] args) {
        String string = "111, ,222,,33";
        String join = joiner.join(Lists.newArrayList("a",null,"b"));
        System.out.println(join);

        for (String s:splitter.split(string)) {
            System.out.println(s);
        }
    }

        //输出结果:
        //a,b
        //111
        //222
        //33

对基本类型进行支持

guava提供了Bytes/Shorts/Ints/Iongs/Floats/Doubles/Chars/Booleans这些基本数据类型的扩展支持.

                //快速创建集合
                List list = Ints.asList(1,2,3,4);
        System.out.println(Ints.join(",",1,2,3));
        //数组合并
                int[] newArray = Ints.concat(new int[]{1,2},new int[]{3,4});
        System.out.println(newArray.length);
                //选出最大最小
        System.out.println(Ints.max(newArray)+","+Ints.min(newArray));
        System.out.println(Ints.contains(newArray,3));
                //集合转成数组
        int[] ints = Ints.toArray(list);

集合

Multiset就是无序的,但是可以重复的集合

                Multiset multiset = HashMultiset.create();
        multiset.add(1);
        multiset.add(2);
        multiset.add(3);
        multiset.add(3);
                //计算元素个数
        System.out.println(multiset.count(2));//2

Multimap是一个KEY多个VALUE

                Multimap multimap = ArrayListMultimap.create();
        multimap.put("a","1");
        multimap.put("a","2");

        System.out.println(multimap.get("a"));

BiMap,可根据key找到value,也可以根据value找到key,但key可以重复,但value不能重复

                BiMap biMap = HashBiMap.create();
        biMap.put("a",1);
        biMap.put("b",2);

        System.out.println(biMap.inverse().get(1));//a

函数式编程:Functions

函数式编程的好处在于在集合遍历操作中提供自定义Function的操作,比如transform转换。我们再也不需要一遍遍的遍历集合,显著的简化了代码。

                List list1 = new ArrayList();
        list1.add("hello");
        list1.add("hello world");
        list1.add("testt");

        Function f1 = new Function() {
            @Nullable
            @Override
            public String apply(@Nullable String s) {
                return s.toUpperCase();
            }
        };

        Function f2 = new Function() {
            @Nullable
            @Override
            public String apply(@Nullable String s) {
                return s.length()<5?s:s.substring(0,5);
            }
        };

        Function f3 = Functions.compose(f1,f2);

        Collection transform = Collections2.transform(list1, f3);
        transform.stream().forEach(s-> System.out.println(s));
image.png

Preconditions

Guava提供了一个PreConditions类来在方法调用前检查看参数是否合适,比如说,是否为null,是否在某个范围等等。


image.png

你可能感兴趣的:(Guava学习)