Guava 已经学习的代码整理

Guava 依赖:

  1. compile group: 'com.google.guava', name: 'guava', version: '18.0'

以下是我自己在开发过程中使用到的谷歌 Guava 的一些例子,有些例子看起来确实没什么用,希望各位朋友们不吝赐教。

参考资料:

1、后悔当初的5年《Google Guava学习》专题

2、蓝学网 Guava 教程

3、

创建不可变集合

  1. ImmutableSet<Integer> numbers = ImmutableSet.of(10,20,30,40,50);
  2. numbers.forEach(System.out::println);

控制台显示:

连接器:集合转成字符串

  1. Set<String> set = new HashSet<>();
  2. set.add("one");
  3. set.add("two");
  4. set.add("three");
  5. set.add("five");
  6. set.add(null);
  7. set.add("six");
  8. // 把集合串成一个字符串,使用 "***" 连接,对于 null 的元素,使用 "no value" 来替代
  9. String str = Joiner.on("***").useForNull("no value").join(set);
  10. System.out.println(str);

控制台显示:

  1. // 设置连接的方式和过滤的格式
  2. Joiner joiner = Joiner.on(",").useForNull("这里是一个空格");
  3. String result = joiner.join("hello",null,"world",null,"你好");
  4. System.out.println(result);

控制台显示:

  1. // 设置连接的方式和过滤的格式
  2. Joiner joiner = Joiner.on("-").skipNulls();
  3. String result = joiner.join("hello",null,"world",null,"你好");
  4. System.out.println(result);

控制台显示:

拆分器:字符串分割

  1. String str = " foo , , bar , queue , ";
  2. // omit 省略空格
  3. List<String> list = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(str);
  4. list.forEach(System.out::println);

控制台显示:

  1. Iterable<String> split = Splitter.on("|").split("android|java|ios| |hello");
  2. Iterator<String> iterator = split.iterator();
  3. StringBuilder sb = new StringBuilder();
  4. while (iterator.hasNext()){
  5. sb.append(iterator.next());
  6. }
  7. System.out.println(sb.toString());

控制台显示:



可以看到,没有跳过空格。

  1. String str = "liwei:zhouguang:huzhenyu:wudi";
  2. int size = Splitter.on(":").splitToList(str).size();
  3. System.out.println(size);

控制台显示:

  1. String str = "liwei:zhouguang:huzhenyu:wudi";
  2. List<String> list = Splitter.on(":").splitToList(str);
  3. list.forEach(System.out::println);

控制台显示:

创建不可变的 Map

  1. ImmutableMap<String,String> map = ImmutableMap.<String,String>builder().
  2. put("name","liwei").
  3. put("age","24").
  4. put("password","123456").
  5. build();
  6. for(Map.Entry<String,String> entry:map.entrySet()){
  7. System.out.println(entry.getKey() + " - " + entry.getValue());
  8. }

控制台显示:

计时(该功能比较常用)

  1. // Stopwatch 旧的用法 Stopwatch stopwatch = new Stopwatch().start(); 已经被弃用
  2. Stopwatch stopwatch = Stopwatch.createStarted();
  3. try {
  4. Thread.sleep(1000);
  5. } catch (InterruptedException e) {
  6. e.printStackTrace();
  7. }
  8. long elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS);
  9. System.out.println(elapsed);

时间单位有:

1、毫秒 TimeUnit.MILLISECONDS 1秒=10^3毫秒

2、微秒 TimeUnit.MICROSECONDS 1秒=10^6微秒

3、纳秒 TimeUnit.NANOSECONDS 1秒=10^9纳秒

下面的单元测试类比较了 Stopwatch.createUnstarted();Stopwatch.createStarted(); 的不同。

  1. public class StopWatchDemo {
  2. @Test
  3. public void test01() {
  4. Stopwatch stopwatch = Stopwatch.createUnstarted();
  5. try {
  6. Thread.sleep(5000);
  7. } catch (InterruptedException e) {
  8. e.printStackTrace();
  9. }
  10. // 表示开始计时
  11. stopwatch.start();
  12. try {
  13. Thread.sleep(1000);
  14. } catch (InterruptedException e) {
  15. e.printStackTrace();
  16. }
  17. stopwatch.stop();
  18. long spend = stopwatch.elapsed(TimeUnit.MILLISECONDS);
  19. System.out.println("消耗了 => " + spend + " 毫秒");
  20. }
  21. @Test
  22. public void test02() {
  23. Stopwatch stopwatch = Stopwatch.createStarted();
  24. // 如果不写 start() 就从 Stopwatch.createStarted(); 开始
  25. // stopwatch.start();
  26. try {
  27. Thread.sleep(3000);
  28. } catch (InterruptedException e) {
  29. e.printStackTrace();
  30. }
  31. stopwatch.stop();
  32. long spend = stopwatch.elapsed(TimeUnit.MILLISECONDS);
  33. System.out.println("消耗了 => " + spend + "毫秒");
  34. }
  35. }

Objects 类的使用

  1. public class Book {
  2. private Integer id;
  3. private String name;
  4. private Date publishDate;
  5. public Integer getId() {
  6. return id;
  7. }
  8. public void setId(Integer id) {
  9. this.id = id;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public Date getPublishDate() {
  18. return publishDate;
  19. }
  20. public void setPublishDate(Date publishDate) {
  21. this.publishDate = publishDate;
  22. }
  23. public Book() {
  24. }
  25. public Book(Integer id, String name, Date publishDate) {
  26. this.id = id;
  27. this.name = name;
  28. this.publishDate = publishDate;
  29. }
  30. @Override
  31. public String toString() {
  32. return "Book{" +
  33. "id=" + id +
  34. ", name='" + name + '\'' +
  35. ", publishDate=" + publishDate +
  36. '}';
  37. }
  38. }
  1. Book book = new Book();
  2. book.setId(1);
  3. book.setName("《Spring In Action》");
  4. book.setPublishDate(new Date());
  5. String s = Objects.toString(book);
  6. System.out.println(s);
  7. String s1 = MoreObjects.toStringHelper(book)
  8. .add("x", 1)
  9. .add("name", book.getName())
  10. .add("date",book.getPublishDate())
  11. .toString();
  12. System.out.println(s1);

控制台显示:

下面再给一个例子:

  1. public class ToStringTest {
  2. private Long userId;
  3. private String name;
  4. private String nickName;
  5. private Gender gender;
  6. @Override
  7. public String toString() {
  8. return MoreObjects.toStringHelper(this).add("name", "liwei")
  9. .add("aaa", "bbb")
  10. .add("userId", "1001").add("nickname", "李威威")
  11. .add("gender", Gender.MAN).omitNullValues().toString();
  12. }
  13. public static void main(String[] args) {
  14. System.out.println(new ToStringTest());
  15. }
  16. }

控制台显示:

  1. boolean equals1 = Objects.equals("a", "a");
  2. System.out.println(equals1); // true
  3. boolean equals2 = Objects.equals(null, "a");
  4. System.out.println(equals2); // false

Guava 已经学习的代码整理的更多相关文章

  1. bootstrap 新手学习笔记 代码整理

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. canvas学习之API整理笔记(二)

    前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...

  3. 【资源】C++学习资料 - 逆天整理 - 精华无密版【最新】

    再失效就太无语了,链接都是多份的~~—————————————————基础——————————————C++环境搭建(全套)http://pan.baidu.com/s/1o6y0smY链接:http ...

  4. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  5. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  6. NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)

    Nodejs学习文档整理 http://www.cnblogs.com/xucheng/p/3988835.html 1.nodejs是什么: nodejs是一个是javascript能在后台运行的平 ...

  7. 一份关于Swift语言学习资源的整理文件

    一份关于Swift语言学习资源的整理文件     周银辉 在这里下载 https://github.com/ipader/SwiftGuide

  8. Smtp邮件发送系统公用代码整理—总结

    1.前言 a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等.那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一 ...

  9. 学习ReactNative笔记整理一___JavaScript基础

    学习ReactNative笔记整理一___JavaScript基础 ★★★笔记时间- 2017-1-9 ★★★ 前言: 现在跨平台是一个趋势,这样可以减少开发和维护的成本.第一次看是看的ReactNa ...

随机推荐

  1. Java——LinkedList使用Demo

    package list; import java.util.Iterator; import java.util.LinkedList; public class LinkedListDemo { ...

  2. Java中字符编码和字符串所占字节数 .

    首 先,java中的一个char是2个字节.java采用unicode,2个字节来表示一个字符,这点与C语言中不同,C语言中采用ASCII,在大多数 系统中,一个char通常占1个字节,但是在0~12 ...

  3. linux 获取目录中详细信息 -rw-r--r--详解

    -rw-r–r– 1 root root 1313 Sep 3 14:59 test.log详解 查询目录中的内容命令 ls [选项] [文件或目录] 选项: -a 显示所有文件.包括隐藏文件 -l ...

  4. P1219八皇后

    这个题是一道USACO的经典dfs,与我见面的时间起码七个月了. 放置n个皇后于n*n棋盘,他们不能互相吃(行,列,对角线),问有几种摆法?于是想到了dfs(自我认为有图的就不用DP).首先确定好了要 ...

  5. CyclicBarrier、CountDownLatch、Callable、FutureTask、thread.join() 、wait()、notify()、Condition

    CyclicBarrier使用: import java.util.Random; import java.util.concurrent.BrokenBarrierException; import ...

  6. PY个树状数组

    树状数组看起来比较简单,于是就挑它下手了... 于是生活终于也对咱下手了... 要讲的就两个东西,一个是开数组,全局变量写最前面,数组是这么开的: f=[0 for i in range(500005 ...

  7. redis的线程模型 与 压力测试

    当客户端与ServerSocket产生连接时,会产生一个 AE_REABLE / AE_WRITABL 事件, 多个Socket可能并发产生不同的事件,IO多路复用程序会监听这些Socket,按照顺序 ...

  8. 基于maven的javaweb项目模块化开发

    转自:https://my.oschina.net/kingfire/blog/273381 基于maven的javaweb项目模块化开发 引言 考虑团队拥有多个类似项目的情况,比如一些功能差异不大的 ...

  9. Redis数据结构&命令手册

    Redis数据结构&命令手册 Redis数据结构 Redis可以存储键与5种不同数据结构之间的映射,这五种数据结构类型分别为STRING(字符串).LIST(列表).SET(集合).HASH( ...

  10. PowerEdge T630服务器安装机器学习环境(Ubuntu18.04、Nvidia 1080Ti驱动、CUDA及CUDNN安装)

    安装步骤 在开始安装之前,我要说明一下,这个Ubuntu18.04系统的安装,使用的连接线(就是服务器和电脑显示器的连接线)必须两头都是VGA连接线,不能使用VGA转HDMI连接线,也不能用DVI转D ...