Guava 介绍

Guava 介绍

Guava是gooogle开放的Java开源库,提高了最佳代码实践并减少代码错误。内置了很多适用的集合方法,缓存机制,原始类型工具,并发编程,通用注解,字符串处理,I/O以及验证等功能。
本文通过简单直接的示例来引入Guava包,希望引起兴趣。

缓存

缓存在软件设计中经常用到,这里看看guava提供的缓存功能。LoadingCache接口声明如下:

   @Beta
   @GwtCompatible
   public interface LoadingCache<K,V> extends Cache<K,V>, Function<K,V>

接口中提供了一些便捷的方法用于操作缓存。这里直接通过示例来说明:

一个实体类,需要缓存:

class Employee {
   String name;
   String dept;
   String emplD;

   public Employee(String name, String dept, String empID) {
      this.name = name;
      this.dept = dept;
      this.emplD = empID;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public String getDept() {
      return dept;
   }

   public void setDept(String dept) {
      this.dept = dept;
   }

   public String getEmplD() {
      return emplD;
   }

   public void setEmplD(String emplD) {
      this.emplD = emplD;
   }

   @Override
   public String toString() {
      return MoreObjects.toStringHelper(Employee.class)
      .add("Name", name)
      .add("Department", dept)
      .add("Emp Id", emplD).toString();
   }    
}

实现缓存的应用代码:

public class CacheTester {
   public static void main(String args[]) {

      //create a cache for employees based on their employee id
      LoadingCache<String, Employee> employeeCache = 
         CacheBuilder.newBuilder()
            .maximumSize(100) // maximum 100 records can be cached
            .expireAfterAccess(30, TimeUnit.MINUTES) // cache will expire after 30 minutes of access
            .build(new CacheLoader<String, Employee>(){ // build the cacheloader

               @Override
               public Employee load(String empId) throws Exception {
                  //make the expensive call
                  return getFromDatabase(empId);
               } 
            });

      try {         
         //on first invocation, cache will be populated with corresponding
         //employee record
         System.out.println("Invocation #1");
         System.out.println(employeeCache.get("100"));
         System.out.println(employeeCache.get("103"));
         System.out.println(employeeCache.get("110"));

         //second invocation, data will be returned from cache
         System.out.println("Invocation #2");
         System.out.println(employeeCache.get("100"));
         System.out.println(employeeCache.get("103"));
         System.out.println(employeeCache.get("110"));

      }catch (ExecutionException e) {
         e.printStackTrace();
      }
   }

   private static Employee getFromDatabase(String empId) {

      Employee e1 = new Employee("Mahesh", "Finance", "100");
      Employee e2 = new Employee("Rohan", "IT", "103");
      Employee e3 = new Employee("Sohan", "Admin", "110");

      Map<String, Employee> database = new HashMap<String, Employee>();

      database.put("100", e1);
      database.put("103", e2);
      database.put("110", e3);

      System.out.println("Database hit for" + empId);

      return database.get(empId);       
   }
}

字符串工具类

Guava提供了很多高级字符串工具类,这里介绍下字符串格式转换:

首先介绍下其定义的几中枚举常量:

  • LOWER_CAMEL
    小写字母开头的骆驼命名方式变量,如: “lowerCamel”.

  • LOWER_HYPHEN
    小写字母有连字符连接方式变量,如:”lower-hyphen”.

  • LOWER_UNDERSCORE
    小写字母有下划线连接方式变量,如:”lower_underscore”.

  • UPPER_CAMEL
    大写字母开头的下划线方式变量,如: “UpperCamel”.

  • UPPER_UNDERSCORE
    大写字母有下划线连接方式变量,如:”UPPER_UNDERSCORE”.

下面示例其转换功能,在自己实现生成代码功能经常用到,如数据库命名为下划线方式,对应java类则是骆驼命名方式。

package com.dataz;

import static org.junit.Assert.assertEquals;

import org.junit.Test;
import com.google.common.base.CaseFormat;

/**
 * 把指定字符串从一种格式转换为另一种格式
 * @author Administrator
 *
 */
public class StringConvertDemoTest {

    @Test
    public void test1() {
        String data = "test-data";
        assertEquals("testData", CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, data));
    }

    @Test
    public void test2() {
        String data = "test_data";
        assertEquals("testData", CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, data));
    }

    @Test
    public void test3() {
        String data = "test_data";
        assertEquals("TestData", CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, data));
    }   
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是什么?它的特点和用途是什么? 回答: Guava Cache 是一个全内存的本地缓存实现,它是 Guava 中的一个模块,提供了线程安全的实现机制。它被广泛应用于 Java 项目中。 Guava Cache 的特点包括简单易用和性能好。它可以用来缓存计算结果、提高系统性能、减少对外部资源的依赖性等。 Guava Cache 提供了多种移除缓存的方式,包括单个移除、批量移除和移除全部。该缓存模块是 Guava 中的一个重要组成部分,而 Guava 是谷歌开源的 Java 工具类库,被许多 Java 项目所依赖。除了缓存功能,Guava 还提供了其他功能,如集合、并发库、通用注解等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Guava Cache本地缓存介绍及使用](https://blog.csdn.net/unbelievevc/article/details/128365002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Guava cache介绍](https://blog.csdn.net/elricboa/article/details/78734896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值