首页 > 其他分享 >Guava工具总结

Guava工具总结

时间:2024-08-30 17:16:45浏览次数:3  
标签:总结 Map get System println put 工具 Guava out

Table双键Map

public class OTest {

    public static void main(String[] args) {
        Map<String, Map<String, Integer>> map = new HashMap<>();
        //存放元素
        Map<String, Integer> workMap = new HashMap<>();
        workMap.put("Jan", 20);
        workMap.put("Feb", 28);
        map.put("Hydra", workMap);
        Map<String, Integer> workMap2 = new HashMap<>();
        workMap2.put("Jan", 18);
        workMap2.put("Feb", 16);
        map.put("Trunks", workMap2);

        //取出元素
        Integer dayCount = map.get("Hydra").get("Jan");
        System.out.println(dayCount);

        // 1、定义 一个表格
        Table<String, String, Integer> table = HashBasedTable.create();
        //存放元素
        table.put("Hydra", "Jan", 20);
        table.put("Hydra", "Feb", 28);

        table.put("Trunks", "Jan", 28);
        table.put("Trunks", "Feb", 16);

        // 1、取出元素
        Integer dayCount2 = table.get("Hydra", "Jan");
        System.out.println(dayCount2);

        // 2、rowKey或columnKey的集合
        Set<String> rowKeys = table.rowKeySet();
        System.out.println(rowKeys);
        Set<String> columnKeys = table.columnKeySet();
        System.out.println(columnKeys);

        // 3、value集合
        Collection<Integer> values = table.values();
        System.out.println(values);
        // 4、转为嵌套的Map
        Map<String, Map<String, Integer>> map2 = table.rowMap();
        System.out.println(map2);
        Map<String, Map<String, Integer>> map3 = table.columnMap();
        System.out.println(map3);
    }
}

BiMap双向Map

public class OTest2 {

    public static void main(String[] args) {
        BiMap<String, String> biMap = HashBiMap.create();
        biMap.put("Hydra", "Programmer");
        biMap.put("Tony", "IronMan");
        biMap.put("Thanos", "Titan");
        //使用key获取value
        System.out.println(biMap.get("Tony"));

        BiMap<String, String> inverse = biMap.inverse();
        //使用value获取key
        System.out.println(inverse.get("Titan"));

        // 1、反转后操作的影响上面我们用inverse方法反转了原来BiMap的键值映射,但是这个反转后的BiMap并不是一个新的对象,
        //    它实现了一种视图的关联,所以对反转后的BiMap执行的所有操作会作用于原先的BiMap上。
        HashBiMap<String, String> biMap1 = HashBiMap.create();
        biMap1.put("Hydra", "Programmer");
        biMap1.put("Tony", "IronMan");
        biMap1.put("Thanos", "Titan");
        BiMap<String, String> inverse1 = biMap1.inverse();

        inverse1.put("IronMan", "Stark");
        System.out.println(biMap1);
        // 2、value不可重复
        // BiMap的底层继承了Map,我们知道在Map中key是不允许重复的,而双向的BiMap中key和value可以认为处于等价地位,因此在这个基础上加了限制,value也是不允许重复的。看一下下面的代码:
        // 这样代码无法正常结束,会抛出一个IllegalArgumentException异常:
        try {
            HashBiMap<String,String> biMap2 = HashBiMap.create();
            biMap2.put("Tony","IronMan");
            biMap2.put("Stark","IronMan");
        } catch (Exception e) {
            if (e instanceof IllegalArgumentException) {
                System.out.println("IllegalArgumentException异常");
            }
        }
        // 3、获取value为set集合
        Set<String> values = biMap.values();
        System.out.println(values);
    }
}

Multimap - 多值Map

public class OTest3 {
    public static void main(String[] args) {
        Multimap<String, Integer> multimap = ArrayListMultimap.create();
        multimap.put("day", 1);
        multimap.put("day", 2);
        multimap.put("day", 8);
        multimap.put("month", 3);
        System.out.println(multimap);

        // 1、获取值的集合
        Collection<Integer> day = multimap.get("day");

        // 如果在创建时指定为ArrayListMultimap类型,那么get方法将返回一个List
        ArrayListMultimap<String, Integer> multimap2 = ArrayListMultimap.create();
        List<Integer> day2 = multimap2.get("day");
        System.out.println(day2);
        // 同理,你还可以创建HashMultimap、TreeMultimap等类型的Multimap。

        // Multimap的get方法会返回一个非null的集合,但是这个集合的内容可能是空,看一下下面的例子
        System.out.println(multimap.get("day"));
        System.out.println(multimap.get("year"));

        // 2、操作get后的集合
        // 和BiMap的使用类似,使用get方法返回的集合也不是一个独立的对象,可以理解为集合视图的关联,对这个新集合的操作仍然会作用于原始的Multimap上,看一下下面的例子:
        ArrayListMultimap<String, Integer> multimap3 = ArrayListMultimap.create();
        multimap3.put("day", 1);
        multimap3.put("day", 2);
        multimap3.put("day", 8);
        multimap3.put("month", 3);

        List<Integer> day3 = multimap3.get("day");
        List<Integer> month3 = multimap3.get("month");
        //这个0是下标
        day3.remove(0);
        month3.add(12);
        System.out.println(multimap);

        // 3、转换为Map
        // 使用asMap方法,可以将Multimap转换为Map<K,Collection>的形式,同样这个Map也可以看做一个关联的视图,在这个Map上的操作会作用于原始的Multimap。
        Map<String, Collection<Integer>> map = multimap.asMap();
        for (String key : map.keySet()) {
            System.out.println(key + ":" + map.get(key));
        }
        map.get("day").add(20);
        System.out.println(multimap);
    }
}

RangeMap范围Map

public class OTest4 {

    public static void main(String[] args) {
        // 先看一个例子,假设我们要根据分数对考试成绩进行分类,那么代码中就会出现这样丑陋的if-else
        System.out.println(getRank(80));

        // 而guava中的RangeMap描述了一种从区间到特定值的映射关系,让我们能够以更为优雅的方法来书写代码。下面用RangeMap改造上面的代码并进行测试:
        RangeMap<Integer, String> rangeMap = TreeRangeMap.create();

        rangeMap.put(Range.closedOpen(0, 60), "fail");
        rangeMap.put(Range.closed(60, 90), "satisfactory");
        rangeMap.put(Range.openClosed(90, 100), "excellent");

        System.out.println(rangeMap.get(59));
        System.out.println(rangeMap.get(60));
        System.out.println(rangeMap.get(90));
        System.out.println(rangeMap.get(91));

        rangeMap.remove(Range.closed(70,80));
        System.out.println(rangeMap.get(75));
    }

    public static String getRank(int score) {
        if (0 <= score && score < 60) {
            return "fail";
        } else if (60 <= score && score <= 90) {
            return "satisfactory";
        } else if (90 < score && score <= 100) {
            return "excellent";
        }
        return null;
    }
}

ClassToInstanceMap实例Map

public class OTest5 {
    public static void main(String[] args) {
        ClassToInstanceMap<Object> instanceMap = MutableClassToInstanceMap.create();
        SysUser user = new SysUser();
        SysDept dept = new SysDept();

        instanceMap.putInstance(SysUser.class, user);
        instanceMap.putInstance(SysDept.class, dept);
        // 使用ClassToInstanceMap这种方式有什么好处呢?
        // 首先,这里最明显的就是在取出对象时省去了复杂的强制类型转换,避免了手动进行类型转换的错误。
        // 其次,我们可以看一下ClassToInstanceMap接口的定义,它是带有泛型的:
        // public interface ClassToInstanceMap<B> extends Map<Class<? extends B>,B>{...}
        ClassToInstanceMap<Map> instanceMap2 = MutableClassToInstanceMap.create();
        HashMap<String, Object> hashMap = new HashMap<>();
        TreeMap<String, Object> treeMap = new TreeMap<>();
        ArrayList<Object> list = new ArrayList<>();

        instanceMap.putInstance(HashMap.class, hashMap);
        instanceMap.putInstance(TreeMap.class, treeMap);
        System.out.println(instanceMap2);
        // 这样是可以正常执行的,因为HashMap和TreeMap都集成了Map父类,但是如果想放入其他类型,就会编译报错:
        // instanceMap2.putInstance(ArrayList.class, list);
    }
}

标签:总结,Map,get,System,println,put,工具,Guava,out
From: https://www.cnblogs.com/stubborn-dude/p/18388968

相关文章

  • (约230个工具)野兔在线工具箱系统最新版本V4.0.1更新
    野兔在线工具箱系统,采用最新ThinkPHP8框架开发完成,也是基于YETUADMIN开发的工具箱系统,这次野兔在线工具系统更新,更新了几个新的功能模块,和已知的问题,修复系统部分功能。程序开发程序名称:野兔在线工具箱系统程序开发:PHP+MySQL+tp8程序源码:100%开源,支持任意二开,商用程序支持:电脑......
  • Mockito用法总结
    Mockito的是用来做什么的Mockito主要用于单元测试过程中模拟被调用方法的依赖<dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>4.8.0</version><scope>test</scope></depende......
  • 视频美颜SDK的核心技术:打造智能化主播美颜工具详解
    视频美颜SDK不仅提升了视频质量,还为主播们提供了智能化、个性化的美颜功能。那么,视频美颜SDK的核心技术究竟是什么?又是如何为主播打造智能化美颜工具的呢? 1.人脸检测与特征点识别视频美颜SDK技术通过深度学习算法,能够在视频流中快速、准确地检测到人脸,并识别多个特征点。这些特征......
  • 推荐几个超级好用的HID调试工具
    最近有调试HID的任务,所以搜罗了市面上目前的一些HID调试工具,其中有几个很好用的,使用体验不错,但是也有些小问题,也一并提出来,大家自行选择~1.纸飞机调试助手大名鼎鼎的纸飞机的确是好用,界面布局清晰,显示一目了然,功能完整。纸飞机对文本做了语法高亮,字母、数字、符号之间的颜......
  • Winobj 是一个由微软提供的工具,用于查看和浏览 Windows 操作系统中的对象命名空间。它
    Winobj是一个由微软提供的工具,用于查看和浏览Windows操作系统中的对象命名空间。它允许你查看系统中的各种对象,如文件系统对象、注册表键、符号链接等,帮助深入了解系统的内部结构。Winobj是由微软开发的一个工具,起源于微软的内部开发和调试需求。它最初是为了帮助开发人员和......
  • 1-0.AI工具
    1-0.AI工具一.我知道或使用过的AI大模型平台1.OpenAI平台:OpenAIGPT特点:提供先进的自然语言处理能力,支持对话生成、文本总结、翻译等。包括GPT-3、GPT-4等版本。2.GoogleAI平台:GoogleCloudAI特点:提供全面的AI和机器学习服务,包括AutoML、自然语言处理、图像分......
  • PHP和Composer做语法转换工具
    原文地址:https://www.mengze2.cn/post/5/最近不是把博客的一些文章从和HTML转到Markdown了吗,因为之前换到了wordpress所以是HTML,但是这些文章再typecho无法被解析,于是就打算开发一个Markdown2HTML工具下面使我的开发笔记,可能比较含糊项目结构一般情况下,我不会这么干,但是为了......
  • 适合小型企业运营的10大AI工具
    人工智能是当今最热门、最受关注的科技分支。各种规模和行业的公司都在开发这些系统,使用它们或两者兼而有之。某种形式的商业就绪AI已经存在多年,机器学习驱动的高级分析作为这一运动的早期先锋。因此,值得问一下为什么那些可能错过了那一波的公司现在却跃跃欲试。答案可以归结......
  • 实用好软-----电脑端 搜索下载小说的工具
         网络小说下载工具对于热爱网络小说爱看小说的朋友们很实用。可以搜索并且下载。方便简单。不仅是下载小说,也可以下载其它的一些电子书籍保存到本地中,不管是在爬取小说信息还是在下载小说的速度上都是比较迅速的。特点:主要是小巧。搜索很快    下载......
  • Ae常用工具和图层的概念
    目录常用工具 图层的概念图层类型常用工具 对工具栏长按鼠标左键可以看到一个下拉菜单。 选中矩形后可以进行填充或者描边。 摁住shift建立一个矩形。摁住空格可以移动画布。 选取工具可以移动图形。旁边还有放缩工具。 图层的概念比如我们建立一个新......