首页 > 编程语言 >Guava Google 核心 Java 类库使用总结

Guava Google 核心 Java 类库使用总结

时间:2022-12-03 23:34:51浏览次数:64  
标签:类库 Google Java System AnswerAIL put println table out


jar 包依赖

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.0-jre</version>
</dependency>

 

Joiner && Splitter

public class AnswerApp {
// 定义连接器, 可支持正则表达式
public static final Joiner JOINER = Joiner.on(",").useForNull("default");
public static final Joiner.MapJoiner MAP_JOINER = Joiner.on(",").withKeyValueSeparator("@");

// 定义分割器, 可支持正则表达式
// trimResults: 去掉元素中的空格 omitEmptyStrings: 忽略空字符 limit: 限制分割的个数
public static final Splitter SPLIT = Splitter.on(",").trimResults().omitEmptyStrings().limit(10);
// 定义固定长度分割器
public static final Splitter FIXLENGTH_SPLIT = Splitter.fixedLength(5);
public static final Splitter.MapSplitter MAP_SPLIT = Splitter.on(",").withKeyValueSeparator("@");
// 注意这里的固定长度5代表 key@value 的长度为 5
public static final Splitter.MapSplitter FIXLENGTH_MAP_SPLIT = Splitter.fixedLength(5).withKeyValueSeparator("@");

public static void main(String[] args) {
List<String> list = Lists.newArrayList("answer", "", "AnswerAIL", null);
System.out.println(JOINER.join(list));
System.out.println();

Map<String, String> map = ImmutableMap.of("name", "AnswerAIL", "email", "[email protected]");
System.out.println(MAP_JOINER.join(map));
System.out.println();

for (String str: SPLIT.split(" answer, ,,AnswerAIL ,code")) {
System.out.print(str + ">");
}
System.out.println("\n");

for (String str: FIXLENGTH_SPLIT.split("aaaaabbbbbccccc")) {
System.out.print(str + ">");
}
System.out.println("\n");

Map<String, String> params = MAP_SPLIT.split("name@AnswerAIL,address@pt");
System.out.println(params);
System.out.println();

System.out.println(FIXLENGTH_MAP_SPLIT.split("aa@a1bb@b2"));
}

}

​程序运行结果​

answer,,AnswerAIL,default

name@AnswerAIL,email@[email protected]

answer>AnswerAIL>code>

aaaaa>bbbbb>ccccc>

{name=AnswerAIL, address=pt}

{aa=a1, bb=b2}

 

Ints

public class AnswerApp {
public static void main(String[] args) {
// 快速转集合
List<Integer> nums = Ints.asList(1, 2, 3, 4, 5);
System.out.println(nums.size()); // 5
System.out.println();

// 集合转数组
int[] array = Ints.toArray(nums);

// 数组合并
int[] concat = Ints.concat(array, new int[]{3, 4, 5});
System.out.println(concat.length); // 8
System.out.println();

// 数组中是否包含某元素
System.out.println(Ints.contains(concat, 3)); // true
System.out.println();

// 数组元素最大值/最小值
System.out.println(Ints.max(new int[]{1, 5, 3})); // 5
System.out.println(Ints.min(new int[]{1, 5, 3})); // 1
System.out.println();

// 元素 3 在集合中出现的下标索引
System.out.println(Ints.indexOf(concat, 3)); // 2
// 元素 3 在集合中最后出现的下标索引
System.out.println(Ints.lastIndexOf(concat, 3)); // 5
}
}

 

Multiset 无序可重复的集合

public static void main(String[] args) {
Multiset multiset = HashMultiset.create();
multiset.add("a");
multiset.add("a");
multiset.add("b");
// 往集合中新增 n 个 元素
multiset.add("c", 5);

// 查看集合的大小
System.out.println(multiset.size()); // 8
// 查看集合内不同元素的个数(会对元素进行去重)
System.out.println(multiset.elementSet().size()); // 3
// 查看集合内某个元素的个数
System.out.println(multiset.count("c")); // 5
}

 

Multimap 实现 key-value 一对多

public static void main(String[] args) {
// Multimap 的实现类有: ArrayListMultimap/HashMultimap/LinkedHashMultimap/TreeMultimap/ImmutableMultimap/...
// Multimap 实现 key-value 一对多的情况
ArrayListMultimap<String, String> arrayListMultimap = ArrayListMultimap.create();
arrayListMultimap.put("name", "answer");
arrayListMultimap.put("name", "AnswerAIL");
arrayListMultimap.put("address", "pt");

// 2
System.out.println(arrayListMultimap.get("name").size());
// {address=[pt], name=[answer, AnswerAIL]}
System.out.println(arrayListMultimap.asMap());
}

 

BiMap

  • find key by value: biMap.get()
  • find value by key: biMap.inverse().get()
public static void main(String[] args) {
BiMap<String, String> biMap = HashBiMap.create();
biMap.put("userName", "Answer");
biMap.put("userName", "AnswerAIL");
// 会抛异常, 不允许 value 重复
// biMap.put("loginName", "AnswerAIL");
// 强制覆盖
biMap.forcePut("loginName", "AnswerAIL");

// 由于 value=AnswerAIL 被强制 loginName 覆盖, 所以 userName 对应的 value=null
System.out.println(biMap.get("userName")); // null
// 如果 key 不存在, 则使用默认 value
System.out.println(biMap.getOrDefault("email", "[email protected]"));
// 根据 value 查找 key
System.out.println(biMap.inverse().get("AnswerAIL")); // loginName
}

 

Table<Row, Column, Value>

public static void main(String[] args) {
Table<String, String, Integer> table = HashBasedTable.create();
table.put("iris", "语文", 88);
table.put("steven", "语文", 90);
table.put("james", "语文", 85);
table.put("iris", "数学", 98);
table.put("steven", "数学", 93);
table.put("james", "数学", 95);
table.put("iris", "英语", 90);
table.put("steven", "英语", 87);
table.put("james", "英语", 86);

System.out.println(table.row("iris"));
System.out.println(table.column("数学"));
System.out.println(table.get("iris", "数学"));
System.out.println();

System.out.println(table.containsRow("iris"));
System.out.println(table.containsColumn("数学"));
System.out.println(table.containsValue(100));
System.out.println();

System.out.println(table.rowKeySet());
System.out.println(table.rowMap());
System.out.println(table.columnKeySet());
System.out.println(table.columnMap());
}

​程序运行时输出​

{语文=88, 数学=98, 英语=90}
{iris=98, steven=93, james=95}
98

true
true
false

[iris, steven, james]
{iris={语文=88, 数学=98, 英语=90}, steven={语文=90, 数学=93, 英语=87}, james={语文=85, 数学=95, 英语=86}}
[语文, 数学, 英语]
{语文={iris=88, steven=90, james=85}, 数学={iris=98, steven=93, james=95}, 英语={iris=90, steven=87, james=86}}

 

本地缓存的实现


标签:类库,Google,Java,System,AnswerAIL,put,println,table,out
From: https://blog.51cto.com/u_15891990/5908798

相关文章

  • HyperLedger/Fabric 快速上手优化版 fabric-sdk-java
    文章目录​​1.前言​​​​2.前置条件​​​​3.区块链网络修改​​​​4.SDK操作步骤​​​​5.transaction.proto​​​​6.相关网址​​1.前言   由于fabri......
  • Java lang
    目录lang1.System标准输入、标准输出和错误输出流访问外部定义的属性和环境变量2.Enum3.ThrowableErrorExceptionReturn与finally的执行顺序4.类型、值和变量5.String字......
  • Java实现MySQL binlog日志监听
    使用案例引入maven依赖<dependency><groupId>com.github.shyiko</groupId><artifactId>mysql-binlog-connector-java</artifactId><version>0.21.0</version></......
  • Java8中Collectors求和功能的自定义扩展
    业务中需要将一组数据分类后收集总和,原本可以使用Collectors.summingInt(),但是我们的数据源是BigDecimal类型的,而Java8原生只提供了summingInt、summingLong、summingDouble......
  • java二维数组
    本文介绍java中二维数组的存放位置int[][]arr=newint[2][3];jvm存放二维数组的图示:下面介绍列数不明确的情况: 代码如下:publicclassTwo{publicsta......
  • [Javascript Performance] Optimisation and deoptimization
    Theoptimizingcompileroptimizesforwhatit’sseen.Ifitseessomethingnew,that’sproblematic. Seletingpropertieshassomestrangeimplicationsonpe......
  • [Javascript Performance] How to benchmark code performance
    Code:benchmark.jsconst{performance}=require('perf_hooks');//SETUP......
  • Jenkins+GitLab实现构建JAVA代码
    目录一、前置环境配置二、创建一个maven任务需要提前部署完成Jenkins+GitLab+maven可以参考我的其他文章进行部署一、前置环境配置1、安装MavenIntegration插件Jenki......
  • java中== 和equals的区别
    本文主要介绍==和equals的区别1.==比较的是地址,引用类型(除了String类)的时候,只要不是同一个对象,就不是同一个地址,String类型的时候,如果new出来两个对象,那么也是不同地......
  • Java火焰图简单学习
    前言立的flags倒了太多次自己还是太菜了..课题太大,自己简单总结一下.要是自己总结错了.就不收费,错就错了!-_-!第一步准备环境一定要设置对java的HOME以及PAT......