Guava 学习笔记(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40646143/article/details/83817379

List只读设置

package com.hp.collections;

import com.google.common.collect.ImmutableList;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 对于list集合的只读设置
 */
public class Demo1 {
    public static void main (String[] args) {
        List<String> list=new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        //对原有list进行包装  相当于原有list的一个视图 快照
        List<String> unmodifiableList = Collections.unmodifiableList(list);
        //当我们强行添加 会出现错误 java.lang.UnsupportedOperationException
        //unmodifiableList.add("d");
        
        //可以通过 改变 list数据来添加 这样不安全
        list.add("d");
        System.out.println(unmodifiableList.size());


        //官网还提供另外一个安全的方法  静态初始化  安全相当简单
        ImmutableList<String> immutableList = ImmutableList.of("a", "b", "c");
        //添加方法已经过时 
        //immutableList.add("d");
        System.out.println(immutableList.size());
    }
}

Collections2.filter相当于过滤器 筛选我们需要的数据

package com.hp.collections;

import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;

import java.util.ArrayList;
import java.util.Collection;
/**需求 : 找出list集合里面回文的数据(正序和倒叙一样的数据)
 * Predicate
 */
public class Demo2 {
    public static void main (String[] args) {
        ArrayList<String> list = Lists.newArrayList("moom", "son", "dad", "hp");
        //匿名内部类对象 : 匿名内部类 同时创建对象
        Collection<String> collection = Collections2.filter(list, new Predicate<String>() {
            @Override
            public boolean apply(String s) {
                //处理逻辑方法
                return new StringBuffer(s).reverse().toString().equals(s);
            }
        });
        for (String s:collection) {
            System.out.println(s);
        }
    }
}

Collections2.transform()进行类型的转换

package com.hp.collections;

import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.common.collect.Sets;

import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Set;

/**set 无序  不可重复
 * 把集合Long类型转化为时间
 */
public class Demo3 {
    public static void main (String[] args) {
        Set<Long> hashSet = Sets.newHashSet();
        hashSet.add(555555L);
        hashSet.add(222222222L);
        hashSet.add(99999999999000000L);

            Collection<String> transform = Collections2.transform(hashSet, new Function<Long, String>() {

            @Override
            public String apply(Long aLong) {
                return new SimpleDateFormat("yyyy-MM-dd").format(aLong);
            }
        });

        for (String s:transform) {
            System.out.println(s);
        }
    }
}

 

 

Functions.compose()函数组合式编程

package com.hp.collections;

import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;

import java.util.Collection;
import java.util.List;

/**
 * 组合式函数编程
 *
 * 对list集合的数据进行判断如果大于5则截取0-5个数据  全部转化为大写输出
 */
public class Demo4 {
    public static void main (String[] args) {
        List<String> list= Lists.newArrayList("goods","hello","ILooveYou");

        Function<String, String> function = new Function<String, String>() {
            @Override
            public String apply(String s) {
                //如果s的长度大于五则截取0-5个字段  如果不大于5则 继续下一个
                return s.length()>5?s.substring(0,5):s;
            }
        };

        Function<String, String> function1 = new Function<String, String>() {
            @Override
            public String apply(String s) {
                //转化为大写
                return s.toUpperCase();
            }
        };

        //相当于数学公式 String str=function1(function(s))
        Function<String, String> functions=Functions.compose(function1, function);

        Collection<String> result = Collections2.transform(list, functions);
        for (String s:result) {
            System.out.println(s);
        }

    }

}

注意:Function导入的包是

com.google.common.base.Function;

不是

import java.util.function.Function;

这个错误,让我找了好久

求俩个集合的交集,差集,并集用到

Sets.intersection() //交集

Sets.difference() //差集

Sets.union()//并集  使用如下

package com.hp.collections;

import com.google.common.collect.Sets;

import java.util.Set;

/**
 * 集合的 交集  差集  并集
 */
public class Demo5 {
    public static void main (String[] args) {
        Set<Integer> set1= Sets.newHashSet(1,2,3,4,5,6);
        Set<Integer> set2= Sets.newHashSet(3,4,5,6,7,8);

        //交集
        Sets.SetView<Integer> setView = Sets.intersection(set1, set2);
        System.out.println("交集为");
        for (Integer it:setView) {
            System.out.println(it);
            
        }

        //差集
        Sets.SetView<Integer> difference = Sets.difference(set1, set2);
        System.out.println("差集为");
        for (Integer it:difference) {
            System.out.println(it);

        }


        //交集
        Sets.SetView<Integer> union= Sets.union(set1, set2);
        System.out.println("交集为");
        for (Integer it:union) {
            System.out.println(it);

        }
    }

}
 

猜你喜欢

转载自blog.csdn.net/qq_40646143/article/details/83817379
今日推荐