Guava学习1

Guava项目涵括了好几个Google开发的JAVA项目所依赖的核心库,像: collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O等. 项目开发需要,所以学习一下。

 

PART1. Basic Utilities

 

   第一.  对于null的case

          1.    Optional类的使用
                

Optional<Integer> possible = Optional.of(5);
possible.isPresent(); // returns true
possible.get(); // returns 5

Optional b = Optional.of(null);
b.get();   //fail fast, throw NullPointerException
b. isPresent();//fail fast, throw NullPointerException

Optional po = Optional.fromNullable(null);
po.isPresent(); //判断是否含有非null的值, false

Optional po = Optional.fromNullable(“22”);
po.isPresent(); // true

 
           2.    Strings类的使用
   

emptyToNull(String)
isNullOrEmpty(String)
nullToEmpty(String)

 

 

   第二.    Preconditions

          

checkArgument(boolean)  // if true, do nothing, if false, throw IllegalArgumentException
checkNotNull(T) // if null, throw NullPointerException, else return T
checkElementIndex(int index, int size) // if index <0 or index >= size, throw IndexOutOfBoundsException, else return index
checkPositionIndex(int index, int size) // similar to checkElementIndex

 

 

   第三.    Ordering

   

class Foo {
  @Nullable String sortedBy;
  int notSortedBy;
}
Ordering<Foo> ordering = Ordering.natural().nullsFirst().onResultOf(new Function<Foo, String>() {
  public String apply(Foo foo) {
    return foo.sortedBy;
  }
});

 

 

   第四.    Object common methods

   

Objects.equal("a", "a"); // returns true
Objects.equal(null, "a"); // returns false
Objects.equal("a", null); // returns false
Objects.equal(null, null); // returns true

     此功能在JDK 7 上已经提供!

 

 

PART2. Collections

 

   第一.    Immutable Collection

InterfaceJDK or Guava?Immutable Version
CollectionJDKImmutableCollection
ListJDKImmutableList
SetJDKImmutableSet
SortedSet/NavigableSetJDKImmutableSortedSet
MapJDKImmutableMap
SortedMapJDKImmutableSortedMap
MultisetGuavaImmutableMultiset
SortedMultisetGuavaImmutableSortedMultiset
MultimapGuavaImmutableMultimap
ListMultimapGuavaImmutableListMultimap
SetMultimapGuavaImmutableSetMultimap
BiMapGuavaImmutableBiMap
ClassToInstanceMapGuavaImmutableClassToInstanceMap
TableGuavaImmutableTable

 

   第二.    New collection types

 

      Multiset:

      

      Multiset<String> wordsMultiset = HashMultiset.create();
      wordsMultiset.add("11");
      wordsMultiset.add("22");
      wordsMultiset.add("33");
      wordsMultiset.add("22");
      wordsMultiset.add("22");
      System.out.println(wordsMultiset.count("22")); //3
      System.out.println(wordsMultiset.count("00")); //0
      System.out.println(wordsMultiset.size());  //5
      System.out.println(wordsMultiset.elementSet().size()); //3

 

      SortedMultiset

      Multimap

     

Multimap<String, String> myMultimap = ArrayListMultimap.create(); 
myMultimap.put("Fruits", "Bannana");  
myMultimap.put("Fruits", "Apple");  
myMultimap.put("Fruits", "Pear");  
myMultimap.put("Vegetables", "Carrot"); 
System.out.println(myMultimap.size());  // 4
Collection<string> fruits = myMultimap.get("Fruits");  
System.out.println(fruits); // [Bannana, Apple, Pear] 
myMultimap.remove("Fruits","Pear");  
System.out.println(myMultimap.get("Fruits")); // [Bannana, Pear]  
// Remove all values for a key  
myMultimap.removeAll("Fruits");  
System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!) 

 

    BiMap: A BiMap<K, V> is a Map<K, V> that guarantees that values are unique

    

BiMap<String, String> map = HashBiMap.create();
map.put("1", "2");
//map.put("3", "2");    // if have this action, will throw IllegalArgumentException
map.put("1", "3"); // this cation will cause key:1, value 3 override the first put

 

    RangeSet

   

RangeSet<Integer> rangeSet = TreeRangeSet.create();
rangeSet.add(Range.closed(1, 10)); // {[1, 10]}
rangeSet.add(Range.closedOpen(11, 15)); // {[1, 10], [11, 15)} 
rangeSet.add(Range.open(15, 20)); // {[1, 10], [11, 20)}
rangeSet.add(Range.openClosed(0, 0)); // {[1, 10], [11, 20)}
rangeSet.remove(Range.open(5, 10)); // {[1, 5], [10, 10], [11, 20)}

 

    RangeMap

   

RangeMap<Integer, String> rangeMap = TreeRangeMap.create();
rangeMap.put(Range.closed(1, 10), "foo"); // {[1, 10] => "foo"}
rangeMap.put(Range.open(3, 6), "bar"); // {[1, 3] => "foo", (3, 6) => "bar", [6, 10] => "foo"}
rangeMap.put(Range.open(10, 20), "foo"); // {[1, 3] => "foo", (3, 6) => "bar", [6, 10] => "foo", (10, 20) => "foo"}
rangeMap.remove(Range.closed(5, 11)); // {[1, 3] => "foo", (3, 5) => "bar", (11, 20) => "foo"}

 

 

   第三.    Utility Classes

 

    Lists(以两个方法为例子)

   

List<Integer> countUp = Ints.asList(1, 2, 3, 4, 5);
List<Integer> countDown = Lists.reverse(theList); // {5, 4, 3, 2, 1}
List<List<Integer>> parts = Lists.partition(countUp, 2); // {{1, 2}, {3, 4}, {5}}

 

    Sets(以三个方法为例子)

   

Set<String> set1 = ImmutableSet.of("one", "two", "three", "six", "seven", "eight");
Set<String> set2 = ImmutableSet.of("two", "three", "five", "seven");
System.out.println(Sets.union(set1, set2));//[one, two, three, six, seven, eight, five]
System.out.println(Sets.difference(set1, set2));//[one, six, eight]
System.out.println(Sets.intersection(set1, set2));//[two, three, seven]

 

    Maps

   

Map<String, Integer> left = ImmutableMap.of("a", 1, "b", 2, "c", 3);
Map<String, Integer> right = ImmutableMap.of("b", 2, "c", 4, "d", 5);
MapDifference<String, Integer> diff = Maps.difference(left, right);
diff.entriesInCommon(); // {"b" => 2}
diff.entriesDiffering(); // {"c" => (3, 4)}
diff.entriesOnlyOnLeft(); // {"a" => 1}
diff.entriesOnlyOnRight(); // {"d" => 5}

 

    Multisets
    Multimaps

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值