前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员的福音——Guava

程序员的福音——Guava

作者头像
Lvshen
发布2022-05-05 16:35:11
2750
发布2022-05-05 16:35:11
举报
前言

Guava是一种基于开源的Java库,其中包含「谷歌」正在由他们很多项目使用的很多核心库。这个库是为了方便编码,并减少编码错误。这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方法。

有人会说,我为什么要要用Guava,用这个有什么用。下面我们来介绍下Guava,介绍来自:https://www.oschina.net/p/guava?hmsr=aladdin1e1。

  • 标准化 - Guava库是由谷歌托管。
  • 高效 - 可靠,快速和有效的扩展JAVA标准库
  • 优化 -Guava库经过高度的优化。
  • 函数式编程 -增加JAVA功能和处理能力。
  • 实用程序 - 提供了经常需要在应用程序开发的许多实用程序类。
  • 验证 -提供标准的故障安全验证机制。
  • 最佳实践 - 强调最佳的做法。
使用前的准备

导入Maven

代码语言:javascript
复制
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>27.0-jre</version>
    <!-- or, for Android: -->
    <version>27.0-android</version>
</dependency>
字符串连接
代码语言:javascript
复制
@Test
public void testJoiner() {
   Joiner joiner = Joiner.on(",").skipNulls();
   String join = joiner.join("Harry", null, "Ron");
   System.out.println("join:" + join);

   Joiner joiner1 = Joiner.on(",").useForNull("");
   String content1 = joiner1.join("Harry", null, "Ron", "Hermione");
   System.out.println("content1:" + content1);

   System.out.println(Joiner.on("-").join("a", "b", "c", "d"));
   System.out.println(Joiner.on("-").join(Lists.newArrayList("a", "b", "c", "d")));
}

「运行结果」

Joiner.on(",").skipNulls()会将为null的值过滤掉。Joiner.on(",").useForNull("")不会过滤掉为null

Map集合Key/Value拼接
代码语言:javascript
复制
@Test
public void testMapJoiner() {
   LinkedHashMap<String, String> map = Maps.newLinkedHashMap();
   map.put("name", "doctor");
   map.put("sex", "man");

   Joiner.MapJoiner mapJoiner = Joiner.on("&").withKeyValueSeparator("~");
   String join = mapJoiner.join(map);
   System.out.println(join);
}

withKeyValueSeparator("~")可以将Map的key和value连接起来。如上图所示。

字符串拆分
代码语言:javascript
复制
@Test
public void testSplitter() {
   String content = ",a,b,,,c,";
   //String content = "a,b";
   // java内置的会忽略[尾部]空内容
   String[] split = content.split(",");
   System.out.println(Arrays.toString(split));

   // guava默认不会忽略空内容
   List<String> splitToList = Splitter.on(",").splitToList(content);
   System.out.println(splitToList.toString());

   // 可以自由选择的忽略,像java一样,忽略空字符串
   List<String> splitToList2 = Splitter.on(",").omitEmptyStrings().trimResults().splitToList(content);
   System.out.println(splitToList2.toString());
}

运行结果如下:

Javaj内置的会忽略【尾部】空内容,而Guava不会。Guava可以根据实际业务场景做定制化的开发。

字符匹配

Guava可以对字符作匹配。功能非常全面

代码语言:javascript
复制
@Test
public void testCharMatcher() {
   // 1.获取字符串中数字
   String str1 = "1mahesh123ff87f";
   String retainFrom = CharMatcher.DIGIT.retainFrom(str1);
   System.out.println("1:" +retainFrom);

   // 2.把多个空格替换,并去掉首位的空格
   String str2 = "     Mahesh     Parashar  ";
   String collapseFrom = CharMatcher.WHITESPACE.trimAndCollapseFrom(str2, ' ');
   System.out.println("2:" +collapseFrom);

   // 3.去掉转义字符(\t,\n,\b...)
   String str3 = " ab\tcd\nef\bg  a";
   String removeFrom = CharMatcher.JAVA_ISO_CONTROL.removeFrom(str3);
   String collapseFrom1 = CharMatcher.WHITESPACE.trimAndCollapseFrom(removeFrom, ' ');
   System.out.println("3:" +collapseFrom1);

   // ★4.把所有的数字用"*"代替
   String str4 = "124abc85dds";
   String replaceFrom = CharMatcher.JAVA_DIGIT.replaceFrom(str4, "*");
   System.out.println("4:" +replaceFrom);

   // 5.获取所有的数字和小写字母
   String str5 = "124abc85ddsAF1HNsd";
   String retainFrom1 = CharMatcher.JAVA_DIGIT.or(CharMatcher.JAVA_LOWER_CASE).retainFrom(str5);
   System.out.println("5:" +retainFrom1);

   // 7.获取所有单字节长度的符号
   String str7 = ",dg,123AH中国";
   String retainFrom2 = CharMatcher.SINGLE_WIDTH.retainFrom(str7);
   System.out.println("7:" +retainFrom2);

   // 8.获取字母
   String str8 = "FirstName LastName +1 123 456 789 !@#$%^&*()_+|}{:\"?><";
   String retainFrom3 = CharMatcher.JAVA_LETTER.retainFrom(str8);
   System.out.println("8:" +retainFrom3);

   // 9.获取字母和数字
   String retainFrom4 = CharMatcher.JAVA_LETTER_OR_DIGIT.retainFrom(str8);
   System.out.println("9:" +retainFrom4);

   // 10.出现次数统计
   int count = CharMatcher.ANY.countIn(str8);
   System.out.println("10:" +count);

   // 11.数字出现次数
   int count1 = CharMatcher.DIGIT.countIn(str8);
   System.out.println("11:" +count1);

   // 12.获得除小写字母外其他所有字符
   String retainFrom5 = CharMatcher.JAVA_LOWER_CASE.negate().retainFrom(str8);
   System.out.println("12:" +retainFrom5);


}

运行结果如下:

equal()比较不用担心空指针异常
代码语言:javascript
复制
@Test
public void test1(){
    //Objects.equal,不用担心空指针异常
    System.out.println(Objects.equal("a", "a"));
    System.out.println(Objects.equal(null, "a"));
    System.out.println(Objects.equal("a", null));
    System.out.println(Objects.equal(null, null));
}

运行结果:

不用担心对象为null
代码语言:javascript
复制
/**
 * 计算所有员工总年龄
 *
 * 不在担心对象为null
 */
@Test
public void test3() {
    final List<Employee> list = Lists.newArrayList(new Employee("emp1", 30),
            new Employee("emp2", 40),
            null,
            new Employee("emp4", 18));
    int sum = 0;
    for (Employee employee : list) {
        sum += Optional.fromNullable(employee).or(new Employee("empx", 0)).getAge();
    }
    System.out.println(sum);
}

如上,遍历时能过滤null对象。

将Map的键值对调
代码语言:javascript
复制
@Test
public void testMap() {
   Map<Integer, String> logfileMap = Maps.newHashMap();
   logfileMap.put(1, "a.log");
   logfileMap.put(2, "b.log");
   logfileMap.put(3, "c.log");

   System.out.println("logfileMap:" + logfileMap);
   Map<String, Integer> integerMap = BimapDemo.reverseMap(logfileMap);
   System.out.println(integerMap);

}

显示效果如下:

如果key值相同怎么处理呢,Guava对于key值相同的处理方法:

代码语言:javascript
复制
@Test
public void testMap1() {
   Map<Integer, String> logfileMap = Maps.newHashMap();
   logfileMap.put(1, "a.log");
   logfileMap.put(2, "b.log");
   logfileMap.put(3, "c.log");
   logfileMap.put(4, "c.log");
   System.out.println("logfileMap:" + logfileMap);

   Map<String, Integer> inverseMap = BimapDemo.reverseMap(logfileMap);
   System.out.println("reverseMap:" + inverseMap);
}

显示结果如下:

代码语言:javascript
复制
logfileMap:{1=a.log, 2=b.log, 3=c.log, 4=c.log}
reverseMap:{c.log=4, b.log=2, a.log=1}

当然Guava还有很多处理Map的数据结构和方法。有兴趣的可以自行研究。

还有个有趣的方法,如果value相同,不让Map存入值。

代码语言:javascript
复制
@Test
public void testBimap1() {
   BiMap<Integer, String> logfileMap = HashBiMap.create();
   logfileMap.put(1, "a.log");
   logfileMap.put(2, "b.log");
   logfileMap.put(3, "c.log");
   logfileMap.put(4, "c.log");
}

如上图,c.long禁止存入。

好了,关于Guava的介绍就到这里了。

本文参与?腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-02,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 Lvshen的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 使用前的准备
  • 字符串连接
  • Map集合Key/Value拼接
  • 字符串拆分
  • 字符匹配
  • equal()比较不用担心空指针异常
  • 不用担心对象为null
  • 将Map的键值对调
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com