侧边栏壁纸
博主头像
coydone博主等级

记录学习,分享生活的个人站点

  • 累计撰写 306 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

集合使用Guava

coydone
2021-02-18 / 0 评论 / 0 点赞 / 308 阅读 / 4,276 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

概述

版本下载: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);
    }
}
0

评论区