guava

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

1.Strings.isNullOrEmpty(input);//input为null或者""。

2.Strings.commonPrefix(a,b);//获得两个字符串相同的前缀

3.Strings.commonSuffix(c,d);//获得两个字符串相同的后缀

4. Strings.padEnd("3", 4, '0');//补全字符串3000  

5. Strings.padStart("1", 2, '0');//补全字符串01

6.Objects.equal(a, b)//比较两个对象是否相等,避免做是否为空的判断

7.Splitter类来拆分字符串:

Iterable<String> splitResults = Splitter.onPattern("[,,]{1,}")
        .trimResults()
        .omitEmptyStrings() //忽略空字符串
        .split("hello,word,,世界,水平");   //hello  word   世界   水平

二次拆分:

String toSplitString = "a=b;c=d,e=f";
Map<String, String> kvs = Splitter.onPattern("[,;]{1,}").withKeyValueSeparator('=').split(toSplitString);
for (Map.Entry<String, String> entry : kvs.entrySet()) {
    System.out.println(String.format("%s,%s", entry.getKey(), entry.getValue()));
}//a,b
c,d
e,f

8.Joiner类来做字符串的合并

String joinResult = Joiner.on(";").join(new String[]{"hello","world"});//hello;world
Map<String, String> map = new HashMap<>();
map.put("a", "b");
map.put("c", "d");
String mapJoinResult = Joiner.on(",").withKeyValueSeparator("=").join(map);
System.out.println(mapJoinResult);//a=b,c=d

9.Preconditions类用来做参数的校验

  1. checkArgument 接受一个boolean类型的参数和一个可选的errorMsg参数,这个方法用来判断参数是否符合某种条件,符合什么条件google guava不关心,在不符合条件时会抛出IllegalArgumentException异常
  2. checkState 和checkArgument参数和实现基本相同,从字面意思上我们也可以知道这个方法是用来判断状态是否正确的,如果状态不正确会抛出IllegalStateException异常
  3. checkNotNull方法用来判断参数是否不是null,如果为null则会抛出NullPointerException空指针异常
  4. checkElementIndex方法用来判断用户传入的数组下标或者list索引位置,是否是合法的,如果不合法会抛出IndexOutOfBoundsException
  5. checkPositionIndexes方法的作用和checkElementIndex方法相似,只是此方法的索引范围是从0到size包括size,而上面的方法不包括size。
  6. public static void main(String[] args) {
        doSomething("Jim", 19, "hello world, hello java");
    }
    
    public static void doSomething(String name, int age, String desc) {
        Preconditions.checkNotNull(name, "name may not be null");
        Preconditions.checkArgument(age >= 18 && age < 99, "age must in range (18,99)");
        Preconditions.checkArgument(desc !=null && desc.length() < 10, "desc too long, max length is ", 10);
    }
  7. Exception in thread "main" java.lang.IllegalArgumentException: desc too long, max length is  [10]
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:189)
        at com.bfxy.rabbitmq.quickstart.A.doSomething(A.java:19)
        at com.bfxy.rabbitmq.quickstart.A.main(A.java:13)

10.不可变集合

Set<String> immutableNamedColors = ImmutableSet.<String>builder()
        .add("red", "green","black","white","grey")
        .build();
immutableNamedColors.add("abc");  //Exception in thread "main" java.lang.UnsupportedOperationException
Set<String> immutableNamedColors =  ImmutableSet.of("red","green","black","white","grey");
Set<String> immutableNamedColors =   ImmutableSet.copyOf(new String[]{"red","green","black","white","grey"});
ImmutableList<String> list = ImmutableSet.copyOf(new String[]{"red", "green", "black", "white", "grey"}).asList();

11.Multiset

Multiset multiset = HashMultiset.create();
String sentences = "this is a story, there is a good girl in the story.";
Iterable<String> words = Splitter.onPattern("[^a-z]{1,}").omitEmptyStrings().trimResults().split(sentences);
for (String word : words) {
    multiset.add(word);
}
for (Object element : multiset.elementSet()) {
    System.out.println((String)element + ":" + multiset.count(element));
}

the:1
a:2
in:1
there:1
this:1
is:2
girl:1
good:1
story:2

  • HashMultiset: 元素存放于 HashMap
  • LinkedHashMultiset: 元素存放于 LinkedHashMap,即元素的排列顺序由第一次放入的顺序决定
  • TreeMultiset:元素被排序存放于TreeMap
  • EnumMultiset: 元素必须是 enum 类型
  • ImmutableMultiset: 不可修改的 Mutiset

12.BiMap:双向Map

BiMap<String,String> weekNameMap = HashBiMap.create();
weekNameMap.put("星期一","Monday");
weekNameMap.put("星期二","Tuesday");
weekNameMap.put("星期三","Wednesday");
weekNameMap.put("星期四","Thursday");
weekNameMap.put("星期五","Friday");
weekNameMap.put("星期六","Saturday");
weekNameMap.put("星期日","Sunday");
System.out.println("星期日的英文名是" + weekNameMap.get("星期日"));//星期日的英文名是Sunday
System.out.println("Sunday的中文是" + weekNameMap.inverse().get("Sunday"));//Sunday的中文是星期日
  1. HashBiMap: key 集合与 value 集合都有 HashMap 实现
  2. EnumBiMap: key 与 value 都必须是 enum 类型
  3. ImmutableBiMap: 不可修改的 BiMap

13.Multimaps:一键多值的Map

Multimap<String, String> myMultimap = ArrayListMultimap.create();

// 添加键值对
myMultimap.put("Fruits", "Bannana");
//给Fruits元素添加另一个元素
myMultimap.put("Fruits", "Apple");
myMultimap.put("Fruits", "Pear");
myMultimap.put("Vegetables", "Carrot");

// 获得multimap的size
int size = myMultimap.size();
System.out.println(size);  // 4

// 获得Fruits对应的所有的值
Collection<String> fruits = myMultimap.get("Fruits");
System.out.println(fruits); // [Bannana, Apple, Pear]

Collection<String> vegetables = myMultimap.get("Vegetables");
System.out.println(vegetables); // [Carrot]

// Removing a single value
myMultimap.remove("Fruits","Pear");
System.out.println(myMultimap.get("Fruits")); // [Bannana, Apple]

// Remove all values for a key
myMultimap.removeAll("Fruits");
System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!)

14.使用Iterators简化Iterator操作

List<String> list = Lists.newArrayList("Apple","Pear","Peach","Banana");
Predicate<String> condition = new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input.startsWith("P");
    }
};
boolean allIsStartsWithP = Iterators.all(list.iterator(), condition);//false
boolean allIsStartsWithP = Iterators.any(list.iterator(), condition);//true
String secondElement = Iterators.get(list.iterator(), 1);//Pear
Iterator<String> startPElements = Iterators.filter(list.iterator(), new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input.startsWith("P");
    }
});//Pear   Peach
String length5Element = Iterators.find(list.iterator(), new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input.length() == 5;
    }
});//Apple
Iterator<Integer> countIterator = Iterators.transform(list.iterator(), new Function<String, Integer>() {
    @Override
    public Integer apply(@Nullable String s) {
        return s.length();
    }
});//5  4  5  6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值