概述
版本下载:https://repo1.maven.org/maven2/com/google/guava/guava/
guava jar包:点击下载
Guava工程包含了若干被Google的Java项目广泛依赖的核心库,例如集合(collections)、缓存(caching)、原生类型支持(primitives support)、并发库(concurrency libraries)、通用注解(common annotations)、字符串处理(string processing)、I/O等等。所有这些工具每天都在被Google的工程师应用在产品服务中。
Guava对JDK集合的扩展,这是Guava最成熟和为人所知的部分。
1、不可变集合:用不变的集合进行防御性编程和性能提升。
2、新集合类型:multisets,multimaps, tables等。
3、强大的集合工具类:提供java.util.Collections中没有的集合工具。
4、扩展工具类:让实现和扩展集合类变得更容易,比如创建Collection的装饰器,或实现迭代器。
使用
1、只读设置
//原生方法实现只读集合
//1、Arrays.asList("aa", "bb", "cc")
//2、List<String> readList = Collections.unmodifiableList(list);
import com.google.common.collect.ImmutableList;
public class Test {
public static void main(String[] args){
ImmutableList<String> iList = ImmutableList.of("aa", "bb", "cc", "dd");
}
}
2、函数式编程:过滤器
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import java.util.ArrayList;
public class Test {
public static void main(String[] args){
ArrayList<String> list = Lists.newArrayList("java", "php", "javascript", "python");
//过滤以 j 开头的字符串
Collections2.filter(list,(e) -> e.startsWith("j")).forEach(System.out::println); //java javascript
}
}
3、函数式编程:转换
import com.google.common.collect.Collections2;
import com.google.common.collect.Sets;
import java.text.SimpleDateFormat;
import java.util.Set;
public class Test {
public static void main(String[] args){
Set<Long> time = Sets.newHashSet(2739223972299L, 2021320110222L, 2022332111207L);
Collections2.
transform(time,(e) -> new SimpleDateFormat("yyyy-MM-dd").
format(e)).
forEach(System.out::println);
}
}
4、组合式函数编程
import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import java.util.ArrayList;
public class Test {
public static void main(String[] args){
ArrayList<String> list = Lists.newArrayList("java", "php", "javascript", "python");
//组合function
Function<String, String> f = Functions.
compose(s1 -> s1.length() > 4 ? s1.substring(0, 4) : s1, s2 -> s2.toUpperCase());
Collections2.transform(list,f).forEach(System.out::println);
}
}
5、集合操作:交集、差集、并集
import com.google.common.collect.Sets;
import java.util.Set;
public class Test {
public static void main(String[] args){
Set<Integer> set1 = Sets.newHashSet(1,2,3);
Set<Integer> set2 = Sets.newHashSet(3,4,5);
//交集
Sets.intersection(set1,set2).forEach(System.out::println);//3
//差集 difference(A,B) A中有但B中没有
Sets.difference(set1,set2).forEach(System.out::println); // 1 2
//并集
Sets.union(set1,set2).forEach(System.out::println); // 1 2 3 4 5
}
}
6、Multiset:无序可重复
import com.google.common.collect.HashMultiset;
//统计字符串中的单词
public class Test {
public static void main(String[] args){
//通过空格分割字符串为字符串数组
String[] s = "good good study day day up".split(" ");
HashMultiset<String> set = HashMultiset.create();
for (String str : s) {
set.add(str);
}
for (String str : set.elementSet()) {
System.out.println(str+":"+set.count(str));
}
}
}
7、Multimap:key可以重复
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
public class Test {
public static void main(String[] args){
Multimap<String,String> multimap = ArrayListMultimap.create();
multimap.put("aa","AA");
multimap.put("aa","AAA");
multimap.put("bb","BB");
//aa:[AA, AAA]
//bb:[BB]
for (String k : multimap.keySet()) {
System.out.println(k+":"+multimap.get(k));
}
}
}
8、BiMap:双向Map(bidirectional Map)键与值不能重复
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
public class Test {
public static void main(String[] args){
BiMap<String,String> map = HashBiMap.create();
map.put("aa","AA");
map.put("bb","BB");
//inverse() 反转
System.out.println(map.inverse().get("AA")); //aa
}
}
9、双键的Map → Table → rowKey+columnKey+value
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
public class Test {
public static void main(String[] args){
Table<String, String, Integer> table = HashBasedTable.create();
table.put("zhangsan","java",80);
table.put("zhangsan","c",60);
table.put("lisi","java",100);
table.cellSet().forEach(System.out::println);
}
}
评论区