首页 > 其他分享 >Google Guava常用的代码示例

Google Guava常用的代码示例

时间:2023-04-23 22:00:58浏览次数:37  
标签:Splitter Google String 示例 System println Guava public out

Google Guava

谷歌出品的,非常实用。包含集合、并发、I/O、散列、缓存、字符串等。

依赖:

<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>18.0</version>
</dependency>

Joiner

Joiner可以连接字符串。

常用方法:

Joiner on(String separator): 指定连接的符号

Joiner skipNulls() : 跳过null

String join(@Nullable Object first, @Nullable Object second, Object... rest): 连接多个字符串

示例如下:

    public static void testJoiner() {
        //使用;来连接多个字符串,跳过null
        Joiner joiner = Joiner.on(";").skipNulls();
        String join = joiner.join("Harry", null, "Ron", "Hermione");
        System.out.println(join);

        List<Integer> list = Arrays.asList(1, 5, 7);
        //list使用逗号连接
        String result = Joiner.on(",").join(list);
        System.out.println(result);
    }

Splitter

Splitter可以用来分隔字符串。

常用方法:

Splitter on(final String separator):指定Splitter的分隔符。

Iterable<String> split(final CharSequence sequence) : 拆分字符串。

List<String> splitToList(CharSequence sequence):拆分字符串,并转换成集合。
注意,splitToList使用了@Beta注解,带有@Beta注解的类或方法可能会发生变化。
它们可以随时以任何方式进行修改,甚至可以删除。不推荐使用。
Splitter 返回List,可以使用 Lists.newArrayList(splitter.split(string))

Splitter omitEmptyStrings():  从结果中自动忽略空字符串。

Splitter fixedLength(final int length): 按固定长度拆分;最后一段可能比给定长度短,但不会为空。

示例如下:

    public static void testSplit() {
        Splitter splitter = Splitter.on(",");

        System.out.println("按分隔符,去拆分字符串.如下:");
        Iterable<String> splits = splitter.split("a,,b,c");
        //遍历splitter的结果为 Iterable
        for (String split : splits) {
            System.out.println(split);
        }
    }

    public static void testSplitList() {
        System.out.println("split返回 list,如下:");
        // 输出结果 [a, , b, c]
        List<String> splitList = Lists.newArrayList( Splitter.on(",").split("a,,b,c"));
        System.out.println(splitList);
    }

    public static void testSplitOmitEmpty() {
        System.out.println("忽略空字符串,如下:");
        // 输出结果 [a, b, c]
        Iterable<String> omit = Splitter.on(",").omitEmptyStrings().split("a,,b,c");
        System.out.println(omit);
    }
    
    public static void testFixedLength() {
        System.out.println("按固定长度拆分;最后一段可能比给定长度短,但不会为空。如下:");
        //输出结果为 a,,b 以及 ,c
        Iterable<String> fixedLengths = Splitter.fixedLength(4).split("a,,b,c");
        for (String split : fixedLengths) {
            System.out.println(split);
        }
    }

Lists类

常用方法:

ArrayList<E> newArrayList(): 初始化一个ArrayList

ArrayList<E> newArrayList(E... elements) :初始化一个ArrayList,并添加多个元素

List<List<T>> partition(List<T> list, int size) : list分页,参数 list 表示被分割的集合, size表示每一页的数量。可以分批处理。非常实用。

示例:

    public static void testPartition() {
        //初始化list
        List<String> list = Lists.newArrayList("lin","chen","wu","zhang","qiu");
        //分页,每页2个元素
        List<List<String>> partitionList = Lists.partition(list, 2);
        if (CollectionUtils.size(partitionList) > 0) {
            //下标是从0开始的,先判断集合的size,避免数组越界。
            List<String> partList = partitionList.get(0);
            //结果为 [lin, chen]
            System.out.println(partList);
        }
    }

Maps类

常用方法:

HashMap<K, V> newHashMap() : 初始化Map

示例如下:

Map<String, String> map = Maps.newHashMap();

参数检查:

public class CheckArgumentDemo {


    public static void main(String[] args) {
        checkNotNull();
    }

    /**
     * 判断空指针
     */
    public static void checkNotNull() {
        String str = null;
        Preconditions.checkNotNull(str);
    }

    /**
     *  检查参数,不满足条件,就给出错误提示
     *
     */
    public static void checkArgument() {
        int age = 17;
        Preconditions.checkArgument(age>=18, "年龄未满18~");
    }


    /**
     *  检查参数,不满足条件,就按格式说明符替换后,给出错误提示
     *
     */
    public static void checkArgumentWithFormat() {
        String name = "lin";
        int age = 17;
        Preconditions.checkArgument(age>=18, "%s年龄为%s,年龄未满18",name, age);
    }



}

Table

Table是Guava中的一种数据结构,两个key对应一个value,相当于表格,某行某列对应一个值。

  • 常用方法:
//以下泛型<R, C, V>,R表示Row(行),C表示Column(列), V表示Value(值)。
<R, C, V> HashBasedTable<R, C, V> create(): 创建一个Table

V put(R rowKey, C columnKey, V value): 在Table中指定行,指定列,放入对应的值。

V get(@Nullable Object rowKey, @Nullable Object columnKey): 获取Table指定行,指定列的值。行和列不能为空。

Map<C, V> row(R rowKey): 获取某一行的所有数据。

Map<R, V> column(C columnKey);  获取某一列的所有数据。

Set<Cell<R, C, V>> cellSet(); 获取Table的所有数据

示例:

    public static void testTable() {
        Table<String, String, Integer> table = HashBasedTable.create();

        table.put("第一行", "第一列", 11);
        table.put("第一行", "第二列", 12);
        table.put("第二行", "第一列", 13);
        //获取Table的所有数据
        Set<Table.Cell<String, String, Integer>> cellSet = table.cellSet();
        System.out.println("cellSet:" + cellSet);
        for (Table.Cell<String, String, Integer> cell : cellSet) {
            String rowKey = cell.getRowKey();
            String columnKey = cell.getColumnKey();
            Integer value = cell.getValue();
            System.out.println("row:" + rowKey + " ,column:" + columnKey + ",value:" + value);
        }
        System.out.println("cellSet结束:" + cellSet);
        
        //获取对应行,对应列的数据
        Integer value = table.get("第一行", "第二列");
        System.out.println(value);

        //获取第一行的数据
        Map<String, Integer> rowMap = table.row("第一行");

        Map<String, Integer> columnMap = table.column("第一列");
        System.out.println(columnMap);

    }

标签:Splitter,Google,String,示例,System,println,Guava,public,out
From: https://www.cnblogs.com/expiator/p/17347890.html

相关文章

  • Google Chrome安装Mathjax插件在Github渲染LaTex公式
    打开chrome应用商店,搜索MathJax3PluginforGithub,安装插件,在阅读Github上的Markdown文件时会自动渲染LaTex公式。渲染前:渲染后:图片来源在Edge上没有找到在Github渲染LaTex公式的插件qwq......
  • MKL稀疏矩阵运算示例及函数封装
    IntelMKL库提供了大量优化程度高、效率快的稀疏矩阵算法,使用MKL库的将大型矩阵进行稀疏表示后,利用稀疏矩阵运算可大量节省计算时间和空间,但由于MKL中的原生API接口繁杂,因此将常用函数封装,便于后续使用,最后在实际例子中调用接口执行想要的矩阵运算。0稀疏矩阵稀疏矩阵是指矩阵......
  • thinkphp在模型中自动完成session赋值示例代码
    相信用过thinkphp的用户都知道thinkphp的模型可以完成很多辅助功能,比如自动验证、自动完成等,今天在开发中遇到自动完成中需要获取session值然后自动赋值的功能,具体看代码;classArticlelModelextendsModel{protected$_auto=array(array('addtime','time',1,'function'......
  • MKL普通矩阵运算示例及函数封装
    本示例将介绍MKL中的矩阵乘法和求逆,使用MKL进行此类大型矩阵运算可大量节省计算时间和空间,但由于MKL中的原生API接口繁杂,因此将常用函数封装,便于后续使用,最后在实际例子中调用接口执行想要的矩阵运算。1MKL矩阵乘法案例所用示例如下,矩阵A、B分别为\[A={\left[{\begin{array......
  • python matplotlib 散点图的拟合直线的简单示例
     #samplepointsX=[0,5,10,15,20]Y=[0,7,10,13,20]#solveforaandbdefbest_fit(X,Y):xbar=sum(X)/len(X)ybar=sum(Y)/len(Y)n=len(X)#orlen(Y)numer=sum([xi*yiforxi,yiinzip(X,Y)])-n*xbar*y......
  • Redis、Memcached、Guava、Ehcache中的算法
    1.LRU简单粗暴的Redis今天看 Redis3.0的发行通告里说,LRU算法大幅提升了,就翻开源码来八卦一下,结果哭笑不得,这旧版的"近似LRU"算法,实在太简单,太偷懒,太Redis了。在 Github的Redis项目里搜索lru,找到代码在redis.c的freeMemoryIfNeeded()函数里。先看 2.6版的代码:竟然就是随机找三......
  • SPI机制的简单示例?
    我们现在需要使用一个内容搜索接口,搜索的实现可能是基于文件系统的搜索,也可能是基于数据库的搜索。    可以看到输出结果:文件搜索helloworld如果在com.cainiao.ys.spi.learn.Search文件里写上两个实现类,那最后的输出结果就是两行了。这就是因为ServiceLoader.lo......
  • Discourse Google Analytics 3 的升级提示
    根据Google官方的消息:GoogleAnalytics(分析)4是我们的新一代效果衡量解决方案,即将取代UniversalAnalytics。自2023年7月1日起,标准UniversalAnalytics媒体资源将停止处理新的命中数据。如果您仍在使用UniversalAnalytics,我们建议您为以后使用GoogleAnalytics(分析)4......
  • 设计模式-模板模式在Java中的使用示例-悍马模型制造示例
    场景设计模式-模板模式在Java中的使用示例:设计模式-模板模式在Java中的使用示上面整理了模板模式的使用示例,为加强理解特记录另一个使用示例,以下示例摘自设计模式之禅第二版。模板方法模式定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即......
  • Discourse Google Analytics 3 的升级提示
    根据Google官方的消息:GoogleAnalytics(分析)4是我们的新一代效果衡量解决方案,即将取代UniversalAnalytics。自2023年7月1日起,标准UniversalAnalytics媒体资源将停止处理新的命中数据。如果您仍在使用UniversalAnalytics,我们建议您为以后使用GoogleAnalytics(分......