Guava是Google开发的一个Java开源工具类库,它提供了许多实用的工具类和功能,可以简化Java编程中的常见任务。
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>29.0-jre</version>
- </dependency>
把集合或数组通过指定分隔符连接成字符串
- List
a = new ArrayList<>(); - a.add("a");
- a.add("b");
- a.add("c");
-
- Joiner joiner = Joiner.on(",");
- System.out.println(joiner.join(a));// a,b,c
-
- a.add(null);
- // 忽略null
- Joiner joiner1 = Joiner.on(",").skipNulls();// a,b,c
- System.out.println(joiner1.join(a));
-
- Joiner joiner2 = Joiner.on(",").useForNull("替代");// a,b,c,替代
- System.out.println(joiner2.join(a));
Splitter
工具类将一个字符串按照逗号进行分割,并将分割后的结果存储在一个Iterable
对象中
- String str="a,b,c";
- Splitter splitter = Splitter.on(",");
- Iterable
iterable = splitter.split(str); - System.out.println(iterable); // [a, b, c]
- str="a,b,,c";
- // omitEmptyStrings 过滤掉空白的字符串
- Splitter splitter1 = Splitter.on(",").omitEmptyStrings();
- Iterable
iterable1 = splitter1.split(str); - System.out.println(iterable1); // [a, b, c]
- str="a,b, c ";
- // trimResults 去除前后空格
- Splitter splitter2 = Splitter.on(",").trimResults();
- Iterable
iterable2 = splitter2.split(str); - System.out.println(iterable2); // [a, b, c]
- // 转为集合
- List
splitToList = splitter2.splitToList(str); - System.out.println(splitToList);
- String str="student_name";
- // 下划线转驼峰
- System.out.println(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, str)); //半驼峰 studentName
- System.out.println(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, str)); //全驼峰 Student_name
- str="studentName";
- // 驼峰转下划线
- System.out.println(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, str)); // student_name
- ArrayList
stringArrayList = Lists.newArrayList("a", "b", "c"); - HashSet
stringHashSet = Sets.newHashSet("a", "b", "c");
大集合分裂成多个集合
- ArrayList
stringArrayList = Lists.newArrayList("a", "b", "c"); - // 把stringArrayList分成小的集合,小的集合大小是2
- List
> partition = Lists.partition(stringArrayList, 2);
- System.out.println(partition); // [[a, b], [c]]
基本类型转集合
- System.out.println(Ints.asList(1, 2, 3)); // [1, 2, 3]
- System.out.println(Longs.asList(1l, 2, 3)); // [1, 2, 3]
- System.out.println(Floats.asList(12.3f, 3.2f, 2.2f)); // [12.3, 3.2, 2.2]
HashMultiset
可以存储重复的元素,并且提供了方便的方法来统计每个元素的数量。它继承自AbstractMultiset
类并实现了Serializable
和Cloneable
接口。
- HashMultiset
multiset = HashMultiset.create(); - multiset.add("a");
- multiset.add("b");
- multiset.add("c");
- multiset.add("a");
- System.out.println(multiset); // [a x 2, b, c]
- Set
> entries = multiset.entrySet(); - System.out.println(entries); // [a x 2, b, c]
- for (Multiset.Entry
entry : entries) { - System.out.println("元素:" + entry.getElement() + ",个数:" + entry.getCount());
- // 元素:a,个数:2
- // 元素:b,个数:1
- // 元素:c,个数:1
- }
- Set
elementSet = multiset.elementSet(); - System.out.println(elementSet); // [a, b, c]
- for (String element : elementSet) {
- System.out.println("元素:" + element);
- // 元素:a
- // 元素:b
- // 元素:c
- }
HashMultimap
允许一个键对应多个值。它继承自AbstractMultimap
类并实现了Serializable
和Cloneable
接口。
- HashMultimap
multimap = HashMultimap.create(); - multimap.put("a","1");
- multimap.put("a","2");
- multimap.put("a","3");
- Collection
values = multimap.get("a"); - System.out.println(values); // [1, 2, 3]
- // 是否包含key=a,value=1的entry
- System.out.println(multimap.containsEntry("a", "1"));
- Map
> jkdMap = multimap.asMap(); // true - System.out.println(jkdMap); // {a=[1, 2, 3]}
ImmutableList
是Guava库中的一个集合类,它是一个不可变的(immutable)列表,即一旦创建就不能被修改。与标准Java的List
接口不同,ImmutableList
的内容在创建后就不能被改变。它实现了List
接口,并提供了一组只读的操作方法来访问列表中的元素。
- ImmutableList
- // 报错 java.lang.UnsupportedOperationException
- // immutableList.add("b");
- // 原生jdk
- List
list = new ArrayList<>(); - list.add("a");
- List
jdkUnmodifiableList = Collections.unmodifiableList(list); - // jdk原生同样报错 java.lang.UnsupportedOperationException
- // jdkUnmodifiableList.add("c");
- // 但是可以对list操作
- list.add("c");
- System.out.println(jdkUnmodifiableList); // [a, c]
Preconditions
是Guava库中的一个工具类,用于在代码中进行前置条件的检查。它提供了一组静态方法,可以验证参数、状态或其他条件是否满足,并在不满足条件时抛出相应的异常。使用Preconditions
可以增强代码的可读性和健壮性,有效地进行参数校验和错误处理。
- String str=null;
- // Preconditions.checkNotNull(str,"参数不能为空"); // NullPointerException: 参数不能为空
- Preconditions.checkArgument(str != null ,"参数不能为空"); // IllegalArgumentException: 参数不能为空