日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Google Guava 库用法整理

發(fā)布時間:2024/4/17 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Google Guava 库用法整理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://macrochen.iteye.com/blog/737058

參考:
http://codemunchies.com/2009/10/beautiful-code-with-google-collections-guava-and-static-imports-part-1/ (2,3,4)
http://blog.publicobject.com

更多用法參考http://ajoo.iteye.com/category/119082

以前這么用:

Java代碼 ?
  • Map<String,?Map<Long,?List<String>>>?map?=?new?HashMap<String,?Map<Long,List<String>>>();??
  • Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long,List<String>>>();


    現(xiàn)在這么用(JDK7將實現(xiàn)該功能):

    Java代碼 ?
  • Map<String,?Map<Long,?List<String>>>?map?=?Maps.newHashMap();??
  • Map<String, Map<Long, List<String>>> map = Maps.newHashMap();



    針對不可變集合:
    以前這么用:

    Java代碼 ?
  • List<String>?list?=?new?ArrayList<String>(); ??
  • list.add("a"); ??
  • list.add("b"); ??
  • list.add("c"); ??
  • list.add("d");??
  • List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); list.add("d");


    現(xiàn)在Guava這么用:

    Java代碼 ?
  • ImmutableList<String>?of?=?ImmutableList.of("a",?"b",?"c",?"d"); ??
  • ImmutableMap<String,String>?map?=?ImmutableMap.of("key1",?"value1",?"key2",?"value2");??
  • ImmutableList<String> of = ImmutableList.of("a", "b", "c", "d"); ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");



    文本文件讀取現(xiàn)在Guava這么用

    Java代碼 ?
  • File?file?=?new?File(getClass().getResource("/test.txt").getFile()); ??
  • List<String>?lines?=?null; ??
  • try?{ ??
  • lines?=?Files.readLines(file,?Charsets.UTF_8); ??
  • }?catch?(IOException?e)?{ ??
  • e.printStackTrace(); ??
  • }??
  • File file = new File(getClass().getResource("/test.txt").getFile()); List<String> lines = null; try { lines = Files.readLines(file, Charsets.UTF_8); } catch (IOException e) { e.printStackTrace(); }



    基本類型比較, 現(xiàn)在Guava這么用:

    Java代碼 ?
  • int?compare?=?Ints.compare(a,?b);??
  • int compare = Ints.compare(a, b);



    Guava中CharMatcher的用法:

    Java代碼 ?
  • assertEquals("89983",?CharMatcher.DIGIT.retainFrom("some?text?89983?and?more")) ??
  • assertEquals("some?text??and?more",?CharMatcher.DIGIT.removeFrom("some?text?89983?and?more"))??
  • assertEquals("89983", CharMatcher.DIGIT.retainFrom("some text 89983 and more")) assertEquals("some text and more", CharMatcher.DIGIT.removeFrom("some text 89983 and more"))



    Guava中Joiner的用法:

    Java代碼 ?
  • int[]?numbers?=?{?1,?2,?3,?4,?5?}; ??
  • String?numbersAsString?=?Joiner.on(";").join(Ints.asList(numbers));??
  • int[] numbers = { 1, 2, 3, 4, 5 }; String numbersAsString = Joiner.on(";").join(Ints.asList(numbers));


    另一種寫法:

    Java代碼 ?
  • String?numbersAsStringDirectly?=?Ints.join(";",?numbers);??
  • String numbersAsStringDirectly = Ints.join(";", numbers);



    Guava中Splitter的用法:

    Java代碼 ?
  • Iterable?split?=?Splitter.on(",").split(numbsAsString);??
  • Iterable split = Splitter.on(",").split(numbsAsString);


    對于這樣的字符串進行切分:

    Java代碼 ?
  • String?testString?=?"foo?,?what,,,more,"; ??
  • Iterable<String>?split?=?Splitter.on(",").omitEmptyStrings().trimResults().split(testString);??
  • String testString = "foo , what,,,more,"; Iterable<String> split = Splitter.on(",").omitEmptyStrings().trimResults().split(testString);



    Ints中一些用法:

    Java代碼 ?
  • int[]?array?=?{?1,?2,?3,?4,?5?}; ??
  • int?a?=?4; ??
  • boolean?contains?=?Ints.contains(array,?a); ??
  • int?indexOf?=?Ints.indexOf(array,?a); ??
  • int?max?=?Ints.max(array); ??
  • int?min?=?Ints.min(array); ??
  • int[]?concat?=?Ints.concat(array,?array2);??
  • int[] array = { 1, 2, 3, 4, 5 }; int a = 4; boolean contains = Ints.contains(array, a); int indexOf = Ints.indexOf(array, a); int max = Ints.max(array); int min = Ints.min(array); int[] concat = Ints.concat(array, array2);



    集合
    set的交集, 并集, 差集的用法(http://publicobject.com/2008/08/coding-in-small-with-google-collections.html)

    Java代碼 ?
  • HashSet?setA?=?newHashSet(1,?2,?3,?4,?5); ??
  • HashSet?setB?=?newHashSet(4,?5,?6,?7,?8); ??
  • ? ??
  • SetView?union?=?Sets.union(setA,?setB); ??
  • System.out.println("union:"); ??
  • for?(Integer?integer?:?union) ??
  • ????System.out.println(integer);??????? ??
  • ? ??
  • SetView?difference?=?Sets.difference(setA,?setB); ??
  • System.out.println("difference:"); ??
  • for?(Integer?integer?:?difference) ??
  • ????System.out.println(integer);?????? ??
  • ? ??
  • SetView?intersection?=?Sets.intersection(setA,?setB); ??
  • System.out.println("intersection:"); ??
  • for?(Integer?integer?:?intersection) ??
  • ????System.out.println(integer);??
  • HashSet setA = newHashSet(1, 2, 3, 4, 5); HashSet setB = newHashSet(4, 5, 6, 7, 8);SetView union = Sets.union(setA, setB); System.out.println("union:"); for (Integer integer : union)System.out.println(integer); SetView difference = Sets.difference(setA, setB); System.out.println("difference:"); for (Integer integer : difference)System.out.println(integer); SetView intersection = Sets.intersection(setA, setB); System.out.println("intersection:"); for (Integer integer : intersection)System.out.println(integer);



    針對Map的用法:

    Java代碼 ?
  • MapDifference?differenceMap?=?Maps.difference(mapA,?mapB); ??
  • ??
  • differenceMap.areEqual(); ??
  • Map?entriesDiffering?=?differenceMap.entriesDiffering(); ??
  • Map?entriesOnlyOnLeft?=?differenceMap.entriesOnlyOnLeft(); ??
  • Map?entriesOnlyOnRight?=?differenceMap.entriesOnlyOnRight(); ??
  • Map?entriesInCommon?=?differenceMap.entriesInCommon();??
  • MapDifference differenceMap = Maps.difference(mapA, mapB);differenceMap.areEqual(); Map entriesDiffering = differenceMap.entriesDiffering(); Map entriesOnlyOnLeft = differenceMap.entriesOnlyOnLeft(); Map entriesOnlyOnRight = differenceMap.entriesOnlyOnRight(); Map entriesInCommon = differenceMap.entriesInCommon();



    驗證與條件檢查
    原來的寫法:

    Java代碼 ?
  • if?(count?<=?0)?{????????????????????????????????????????????????????????????????????????????????????????? ??
  • ????throw?new?IllegalArgumentException("must?be?positive:?"?+?count);??????? ??
  • }?? ??
  • ??????
  • if (count <= 0) { throw new IllegalArgumentException("must be positive: " + count); }

    ???????????
    Guava的寫法(Jakarta Commons中有類似的方法):

    Java代碼 ?
  • Preconditions.checkArgument(count?>?0,?"must?be?positive:?%s",?count);??
  • Preconditions.checkArgument(count > 0, "must be positive: %s", count);



    一個更酷的用法:

    Java代碼 ?
  • public?PostExample(final?String?title,?final?Date?date,?final?String?author)?{ ??
  • ????this.title?=?checkNotNull(title); ??
  • ????this.date?=?checkNotNull(date); ??
  • ????this.author?=?checkNotNull(author); ??
  • }??
  • public PostExample(final String title, final Date date, final String author) {this.title = checkNotNull(title);this.date = checkNotNull(date);this.author = checkNotNull(author); }



    如果一個key對應(yīng)多個value的Map, 你會怎么處理? 如果還在使用Map<K, List<V>>的話, 你就out了
    使用MultiMap吧:

    Java代碼 ?
  • Multimap<Person,?BlogPost>?multimap?=?ArrayListMultimap.create();??
  • Multimap<Person, BlogPost> multimap = ArrayListMultimap.create();



    Multimap的另一個使用場景:
    比如有一個文章數(shù)據(jù)的map:

    Java代碼 ?
  • List<Map<String,?String>>?listOfMaps?=?mapOf("type",?"blog",?"id",?"292",?"author",?"john");??
  • List<Map<String, String>> listOfMaps = mapOf("type", "blog", "id", "292", "author", "john");


    如果要按照type分組生成一個List

    Java代碼 ?
  • Multimap<String,?Map<String,?String>>?partitionedMap?=?Multimaps.index(??? ??
  • ????????????????listOfMaps,??????????????????????????????????????????????????????????????????????????????????????? ??
  • ????????????????new?Function<Map<String,?String>,?String>()?{????????????????????????????????? ??
  • ????????????????????public?String?apply(final?Map<String,?String>?from)?{???????????????????? ??
  • ????????????????????????return?from.get("type");????????????????????????????????????????????????????????????? ??
  • ????????????????????}??????????????????????????????????????????????????????????????????????????????????????????????????? ??
  • ????????????????});???
  • Multimap<String, Map<String, String>> partitionedMap = Multimaps.index( listOfMaps, new Function<Map<String, String>, String>() { public String apply(final Map<String, String> from) { return from.get("type"); } });

    ????????????????????????????????????????????????????????????????????????????????????????????????????
    針對集合中只有一個元素的情況:
    Iterables.getOnlyElement();
    這個主要是用來替換Set.iterator.next()或 List.get(0), 而且在測試中使用非常方便, 如果出現(xiàn)0個或者2+則直接拋出異常

    比較的最大最小值:
    Comparators.max
    Comparators.min

    equals和hashcode的用法:

    Java代碼 ?
  • public?boolean?equals(Object?o)?{ ??
  • ??if?(o?instanceof?Order)?{ ??
  • ????Order?that?=?(Order)o; ??
  • ??
  • ????return?Objects.equal(address,?that.address) ??
  • ????????&&?Objects.equal(targetArrivalDate,?that.targetArrivalDate) ??
  • ????????&&?Objects.equal(lineItems,?that.lineItems); ??
  • ??}?else?{ ??
  • ????return?false; ??
  • ??} ??
  • } ??
  • ??
  • public?int?hashCode()?{ ??
  • ??return?Objects.hashCode(address,?targetArrivalDate,?lineItems); ??
  • }??
  • public boolean equals(Object o) {if (o instanceof Order) {Order that = (Order)o;return Objects.equal(address, that.address)&& Objects.equal(targetArrivalDate, that.targetArrivalDate)&& Objects.equal(lineItems, that.lineItems);} else {return false;}}public int hashCode() {return Objects.hashCode(address, targetArrivalDate, lineItems);}



    ImmutableList.copyOf的用法:
    以前這么用:

    Java代碼 ?
  • public?Directions(Address?from,?Address?to,?List<Step>?steps)?{ ??
  • ??this.from?=?from; ??
  • ??this.to?=?to; ??
  • ??this.steps?=?Collections.unmodifiableList(new?ArrayList<Step>(steps)); ??
  • }??
  • public Directions(Address from, Address to, List<Step> steps) {this.from = from;this.to = to;this.steps = Collections.unmodifiableList(new ArrayList<Step>(steps));}


    現(xiàn)在這么用:

    Java代碼 ?
  • public?Directions(Address?from,?Address?to,?List<Step>?steps)?{ ??
  • ??this.from?=?from; ??
  • ??this.to?=?to; ??
  • ??this.steps?=?ImmutableList.of(steps); ??
  • }??
  • public Directions(Address from, Address to, List<Step> steps) {this.from = from;this.to = to;this.steps = ImmutableList.of(steps);}



    Iterables.concat()的用法:
    以前這么用:

    Java代碼 ?
  • public?boolean?orderContains(Product?product)?{ ??
  • ??List<LineItem>?allLineItems?=?new?ArrayList<LineItem>(); ??
  • ??allLineItems.addAll(getPurchasedItems()); ??
  • ??allLineItems.addAll(getFreeItems()); ??
  • ??
  • ??for?(LineItem?lineItem?:?allLineItems)?{ ??
  • ????if?(lineItem.getProduct()?==?product)?{ ??
  • ??????return?true; ??
  • ????} ??
  • ??} ??
  • ??
  • ??return?false; ??
  • }??
  • public boolean orderContains(Product product) {List<LineItem> allLineItems = new ArrayList<LineItem>();allLineItems.addAll(getPurchasedItems());allLineItems.addAll(getFreeItems());for (LineItem lineItem : allLineItems) {if (lineItem.getProduct() == product) {return true;}}return false;}


    現(xiàn)在這么用:

    Java代碼 ?
  • public?boolean?orderContains(Product?product)?{ ??
  • ??for?(LineItem?lineItem?:?Iterables.concat(getPurchasedItems(),?getFreeItems()))?{ ??
  • ????if?(lineItem.getProduct()?==?product)?{ ??
  • ??????return?true; ??
  • ????} ??
  • ??} ??
  • ??
  • ??return?false; ??
  • }??
  • public boolean orderContains(Product product) {for (LineItem lineItem : Iterables.concat(getPurchasedItems(), getFreeItems())) {if (lineItem.getProduct() == product) {return true;}}return false;}



    Constraints.constrainedList: 給List操作注入約束邏輯, 比如添加不合法元素直接報錯.
    以前這么寫:

    Java代碼 ?
  • private?final?List<LineItem>?purchases?=?new?ArrayList<LineItem>(); ??
  • ??
  • /** ?
  • ?*?Don't?modify?this!?Instead,?call?{@link?#addPurchase(LineItem)}?to?add ?
  • ?*?new?purchases?to?this?order. ?
  • ?*/??
  • public?List<LineItem>?getPurchases()?{ ??
  • ??return?Collections.unmodifiableList(purchases); ??
  • } ??
  • ??
  • public?void?addPurchase(LineItem?purchase)?{ ??
  • ??Preconditions.checkState(catalog.isOffered(getAddress(),?purchase.getProduct())); ??
  • ??Preconditions.checkState(purchase.getCharge().getUnits()?>?0); ??
  • ??purchases.add(purchase); ??
  • } ??
  • 這么寫: ??
  • private?final?List<LineItem>?purchases?=?Constraints.constrainedList( ??
  • ????new?ArrayList<LineItem>(), ??
  • ????new?Constraint<LineItem>()?{ ??
  • ??????public?void?checkElement(LineItem?element)?{ ??
  • ????????Preconditions.checkState(catalog.isOffered(getAddress(),?element.getProduct())); ??
  • ????????Preconditions.checkState(element.getCharge().getUnits()?>?0); ??
  • ??????} ??
  • ????}); ??
  • ??
  • /** ?
  • ?*?Returns?the?modifiable?list?of?purchases?in?this?order. ?
  • ?*/??
  • public?List<LineItem>?getPurchases()?{ ??
  • ??return?purchases; ??
  • }??
  • private final List<LineItem> purchases = new ArrayList<LineItem>();/*** Don't modify this! Instead, call {@link #addPurchase(LineItem)} to add* new purchases to this order.*/public List<LineItem> getPurchases() {return Collections.unmodifiableList(purchases);}public void addPurchase(LineItem purchase) {Preconditions.checkState(catalog.isOffered(getAddress(), purchase.getProduct()));Preconditions.checkState(purchase.getCharge().getUnits() > 0);purchases.add(purchase);} 現(xiàn)在這么寫:private final List<LineItem> purchases = Constraints.constrainedList(new ArrayList<LineItem>(),new Constraint<LineItem>() {public void checkElement(LineItem element) {Preconditions.checkState(catalog.isOffered(getAddress(), element.getProduct()));Preconditions.checkState(element.getCharge().getUnits() > 0);}});/*** Returns the modifiable list of purchases in this order.*/public List<LineItem> getPurchases() {return purchases;}



    不允許插入空值的Set(Constraints的用法):

    Java代碼 ?
  • Set<String>?set?=?Sets.newHashSet(); ??
  • Set<String>?constrainedSet?=?Constraints.constrainedSet(set,?Constraints.notNull()); ??
  • constrainedSet.add("A"); ??
  • constrainedSet.add(null);?//?NullPointerException?here??
  • Set<String> set = Sets.newHashSet();Set<String> constrainedSet = Constraints.constrainedSet(set, Constraints.notNull());constrainedSet.add("A");constrainedSet.add(null); // NullPointerException here



    Multimap的用法(允許多值的map):
    以前這么寫:

    Java代碼 ?
  • Map<Salesperson,?List<Sale>>?map?=?new?Hashmap<SalesPerson,?List<Sale>>(); ??
  • ??
  • public?void?makeSale(Salesperson?salesPerson,?Sale?sale)?{ ??
  • ??List<Sale>?sales?=?map.get(salesPerson); ??
  • ??if?(sales?==?null)?{ ??
  • ????sales?=?new?ArrayList<Sale>(); ??
  • ????map.put(salesPerson,?sales); ??
  • ??} ??
  • ??sales.add(sale); ??
  • }??
  • Map<Salesperson, List<Sale>> map = new Hashmap<SalesPerson, List<Sale>>();public void makeSale(Salesperson salesPerson, Sale sale) {List<Sale> sales = map.get(salesPerson);if (sales == null) {sales = new ArrayList<Sale>();map.put(salesPerson, sales);}sales.add(sale);}


    現(xiàn)在這么寫:

    Java代碼 ?
  • Multimap<Salesperson,?Sale>?multimap? ??
  • ????=?new?ArrayListMultimap<Salesperson,Sale>(); ??
  • ??
  • public?void?makeSale(Salesperson?salesPerson,?Sale?sale)?{ ??
  • ??multimap.put(salesperson,?sale); ??
  • }??
  • Multimap<Salesperson, Sale> multimap = new ArrayListMultimap<Salesperson,Sale>();public void makeSale(Salesperson salesPerson, Sale sale) {multimap.put(salesperson, sale);}


    以前這么寫:

    Java代碼 ?
  • public?Sale?getBiggestSale()?{ ??
  • ??Sale?biggestSale?=?null; ??
  • ??for?(List<Sale>?sales?:?map.values())?{ ??
  • ????Sale?biggestSaleForSalesman ??
  • ????????=?Collections.max(sales,?SALE_COST_COMPARATOR); ??
  • ????if?(biggestSale?==?null??
  • ????????||?biggestSaleForSalesman.getCharge()?>?biggestSale().getCharge())?{ ??
  • ??????biggestSale?=?biggestSaleForSalesman; ??
  • ????} ??
  • ??} ??
  • ??return?biggestSale; ??
  • }??
  • public Sale getBiggestSale() {Sale biggestSale = null;for (List<Sale> sales : map.values()) {Sale biggestSaleForSalesman= Collections.max(sales, SALE_COST_COMPARATOR);if (biggestSale == null|| biggestSaleForSalesman.getCharge() > biggestSale().getCharge()) {biggestSale = biggestSaleForSalesman;}}return biggestSale;}


    現(xiàn)在這么寫(需要將map轉(zhuǎn)換成multimap):

    Java代碼 ?
  • public?Sale?getBiggestSale()?{ ??
  • ??return?Collections.max(multimap.values(),?SALE_COST_COMPARATOR); ??
  • }??
  • public Sale getBiggestSale() {return Collections.max(multimap.values(), SALE_COST_COMPARATOR);}



    Joiner的用法:
    以前這樣寫:

    Java代碼 ?
  • public?class?ShoppingList?{ ??
  • ??private?List<Item>?items?=?...; ??
  • ??
  • ??... ??
  • ??
  • ??public?String?toString()?{ ??
  • ????StringBuilder?stringBuilder?=?new?StringBuilder(); ??
  • ????for?(Iterator<Item>?s?=?items.iterator();?s.hasNext();?)?{ ??
  • ??????stringBuilder.append(s.next()); ??
  • ??????if?(s.hasNext())?{ ??
  • ????????stringBuilder.append("?and?"); ??
  • ??????} ??
  • ????} ??
  • ????return?stringBuilder.toString(); ??
  • ??} ??
  • }??
  • public class ShoppingList {private List<Item> items = ...;...public String toString() {StringBuilder stringBuilder = new StringBuilder();for (Iterator<Item> s = items.iterator(); s.hasNext(); ) {stringBuilder.append(s.next());if (s.hasNext()) {stringBuilder.append(" and ");}}return stringBuilder.toString();} }


    現(xiàn)在這樣寫:

    Java代碼 ?
  • public?class?ShoppingList?{ ??
  • ?private?List<Item>?items?=?...; ??
  • ??
  • ?... ??
  • ??
  • ?public?String?toString()?{ ??
  • ???return?Join.join("?and?",?items); ??
  • ?} ??
  • }??
  • public class ShoppingList {private List<Item> items = ...;...public String toString() {return Join.join(" and ", items);} }



    Comparators.fromFunction的用法:
    以前這樣寫:

    Java代碼 ?
  • public?Comparator<Product>?createRetailPriceComparator( ??
  • ????final?CurrencyConverter?currencyConverter)?{ ??
  • ??return?new?Comparator<Product>()?{ ??
  • ????public?int?compare(Product?a,?Product?b)?{ ??
  • ??????return?getRetailPriceInUsd(a).compareTo(getRetailPriceInUsd(b)); ??
  • ????} ??
  • ????public?Money?getRetailPriceInUsd(Product?product)?{ ??
  • ??????Money?retailPrice?=?product.getRetailPrice(); ??
  • ??????return?retailPrice.getCurrency()?==?CurrencyCode.USD ??
  • ????????????retailPrice ??
  • ??????????:?currencyConverter.convert(retailPrice,?CurrencyCode.USD); ??
  • ????} ??
  • ??}; ??
  • }??
  • public Comparator<Product> createRetailPriceComparator(final CurrencyConverter currencyConverter) {return new Comparator<Product>() {public int compare(Product a, Product b) {return getRetailPriceInUsd(a).compareTo(getRetailPriceInUsd(b));}public Money getRetailPriceInUsd(Product product) {Money retailPrice = product.getRetailPrice();return retailPrice.getCurrency() == CurrencyCode.USD? retailPrice: currencyConverter.convert(retailPrice, CurrencyCode.USD);}};}


    現(xiàn)在這樣寫(感覺也沒省多少):

    Java代碼 ?
  • public?Comparator<Product>?createRetailPriceComparator( ??
  • ????final?CurrencyConverter?currencyConverter)?{ ??
  • ??return?Comparators.fromFunction(new?Function<Product,Money>()?{ ??
  • ????/**?returns?the?retail?price?in?USD?*/??
  • ????public?Money?apply(Product?product)?{ ??
  • ??????Money?retailPrice?=?product.getRetailPrice(); ??
  • ??????return?retailPrice.getCurrency()?==?CurrencyCode.USD ??
  • ????????????retailPrice ??
  • ??????????:?currencyConverter.convert(retailPrice,?CurrencyCode.USD); ??
  • ????} ??
  • ??}); ??
  • }??
  • public Comparator<Product> createRetailPriceComparator(final CurrencyConverter currencyConverter) {return Comparators.fromFunction(new Function<Product,Money>() {/** returns the retail price in USD */public Money apply(Product product) {Money retailPrice = product.getRetailPrice();return retailPrice.getCurrency() == CurrencyCode.USD? retailPrice: currencyConverter.convert(retailPrice, CurrencyCode.USD);}});}



    BiMap(雙向map)的用法:
    以前的用法:

    Java代碼 ?
  • private?static?final?Map<Integer,?String>?NUMBER_TO_NAME; ??
  • private?static?final?Map<String,?Integer>?NAME_TO_NUMBER; ??
  • ??
  • static?{ ??
  • ??NUMBER_TO_NAME?=?Maps.newHashMap(); ??
  • ??NUMBER_TO_NAME.put(1,?"Hydrogen"); ??
  • ??NUMBER_TO_NAME.put(2,?"Helium"); ??
  • ??NUMBER_TO_NAME.put(3,?"Lithium"); ??
  • ?? ??
  • ??/*?reverse?the?map?programatically?so?the?actual?mapping?is?not?repeated?*/??
  • ??NAME_TO_NUMBER?=?Maps.newHashMap(); ??
  • ??for?(Integer?number?:?NUMBER_TO_NAME.keySet())?{ ??
  • ????NAME_TO_NUMBER.put(NUMBER_TO_NAME.get(number),?number); ??
  • ??} ??
  • } ??
  • ??
  • public?static?int?getElementNumber(String?elementName)?{ ??
  • ??return?NUMBER_TO_NAME.get(elementName); ??
  • } ??
  • ??
  • public?static?string?getElementName(int?elementNumber)?{ ??
  • ??return?NAME_TO_NUMBER.get(elementNumber); ??
  • }??
  • private static final Map<Integer, String> NUMBER_TO_NAME;private static final Map<String, Integer> NAME_TO_NUMBER;static {NUMBER_TO_NAME = Maps.newHashMap();NUMBER_TO_NAME.put(1, "Hydrogen");NUMBER_TO_NAME.put(2, "Helium");NUMBER_TO_NAME.put(3, "Lithium");/* reverse the map programatically so the actual mapping is not repeated */NAME_TO_NUMBER = Maps.newHashMap();for (Integer number : NUMBER_TO_NAME.keySet()) {NAME_TO_NUMBER.put(NUMBER_TO_NAME.get(number), number);}}public static int getElementNumber(String elementName) {return NUMBER_TO_NAME.get(elementName);}public static string getElementName(int elementNumber) {return NAME_TO_NUMBER.get(elementNumber);}


    現(xiàn)在的用法:

    Java代碼 ?
  • private?static?final?BiMap<Integer,String>?NUMBER_TO_NAME_BIMAP; ??
  • ??
  • static?{ ??
  • ??NUMBER_TO_NAME_BIMAP?=?Maps.newHashBiMap(); ??
  • ??NUMBER_TO_NAME_BIMAP.put(1,?"Hydrogen"); ??
  • ??NUMBER_TO_NAME_BIMAP.put(2,?"Helium"); ??
  • ??NUMBER_TO_NAME_BIMAP.put(3,?"Lithium"); ??
  • } ??
  • ??
  • public?static?int?getElementNumber(String?elementName)?{ ??
  • ??return?NUMBER_TO_NAME_BIMAP.inverse().get(elementName); ??
  • } ??
  • ??
  • public?static?string?getElementName(int?elementNumber)?{ ??
  • ??return?NUMBER_TO_NAME_BIMAP.get(elementNumber); ??
  • }??
  • private static final BiMap<Integer,String> NUMBER_TO_NAME_BIMAP;static {NUMBER_TO_NAME_BIMAP = Maps.newHashBiMap();NUMBER_TO_NAME_BIMAP.put(1, "Hydrogen");NUMBER_TO_NAME_BIMAP.put(2, "Helium");NUMBER_TO_NAME_BIMAP.put(3, "Lithium");}public static int getElementNumber(String elementName) {return NUMBER_TO_NAME_BIMAP.inverse().get(elementName);}public static string getElementName(int elementNumber) {return NUMBER_TO_NAME_BIMAP.get(elementNumber);}


    換一種寫法:

    Java代碼 ?
  • private?static?final?BiMap<Integer,String>?NUMBER_TO_NAME_BIMAP ??
  • ??=?new?ImmutableBiMapBuilder<Integer,String>() ??
  • ??????.put(1,?"Hydrogen") ??
  • ??????.put(2,?"Helium") ??
  • ??????.put(3,?"Lithium") ??
  • ??????.getBiMap();??
  • private static final BiMap<Integer,String> NUMBER_TO_NAME_BIMAP= new ImmutableBiMapBuilder<Integer,String>().put(1, "Hydrogen").put(2, "Helium").put(3, "Lithium").getBiMap();



    關(guān)于Strings的一些用法(http://blog.ralscha.ch/?p=888):

    Java代碼 ?
  • assertEquals("test",?Strings.emptyToNull("test")); ??
  • assertEquals("?",?Strings.emptyToNull("?")); ??
  • assertNull(Strings.emptyToNull("")); ??
  • assertNull(Strings.emptyToNull(null)); ??
  • ? ??
  • assertFalse(Strings.isNullOrEmpty("test")); ??
  • assertFalse(Strings.isNullOrEmpty("?")); ??
  • assertTrue(Strings.isNullOrEmpty("")); ??
  • assertTrue(Strings.isNullOrEmpty(null)); ??
  • ? ??
  • assertEquals("test",?Strings.nullToEmpty("test")); ??
  • assertEquals("?",?Strings.nullToEmpty("?")); ??
  • assertEquals("",?Strings.nullToEmpty("")); ??
  • assertEquals("",?Strings.nullToEmpty(null)); ??
  • ? ??
  • assertEquals("Ralph_____",?Strings.padEnd("Ralph",?10,?'_')); ??
  • assertEquals("Bob_______",?Strings.padEnd("Bob",?10,?'_')); ??
  • ? ??
  • assertEquals("_____Ralph",?Strings.padStart("Ralph",?10,?'_')); ??
  • assertEquals("_______Bob",?Strings.padStart("Bob",?10,?'_')); ??
  • ??
  • assertEquals("xyxyxyxyxy",?Strings.repeat("xy",?5));??
  • assertEquals("test", Strings.emptyToNull("test")); assertEquals(" ", Strings.emptyToNull(" ")); assertNull(Strings.emptyToNull("")); assertNull(Strings.emptyToNull(null));assertFalse(Strings.isNullOrEmpty("test")); assertFalse(Strings.isNullOrEmpty(" ")); assertTrue(Strings.isNullOrEmpty("")); assertTrue(Strings.isNullOrEmpty(null));assertEquals("test", Strings.nullToEmpty("test")); assertEquals(" ", Strings.nullToEmpty(" ")); assertEquals("", Strings.nullToEmpty("")); assertEquals("", Strings.nullToEmpty(null));assertEquals("Ralph_____", Strings.padEnd("Ralph", 10, '_')); assertEquals("Bob_______", Strings.padEnd("Bob", 10, '_'));assertEquals("_____Ralph", Strings.padStart("Ralph", 10, '_')); assertEquals("_______Bob", Strings.padStart("Bob", 10, '_'));assertEquals("xyxyxyxyxy", Strings.repeat("xy", 5));



    Throwables的用法(將檢查異常轉(zhuǎn)換成未檢查異常):

    Java代碼 ?
  • package?com.ociweb.jnb.apr2010; ??
  • ??
  • import?com.google.common.base.Throwables; ??
  • ??
  • import?java.io.InputStream; ??
  • import?java.net.URL; ??
  • ??
  • public?class?ExerciseThrowables?{ ??
  • ????public?static?void?main(String[]?args)?{ ??
  • ????????try?{ ??
  • ????????????URL?url?=?new?URL("http://ociweb.com"); ??
  • ????????????final?InputStream?in?=?url.openStream(); ??
  • ????????????//?read?from?the?input?stream ??
  • ????????????in.close(); ??
  • ????????}?catch?(Throwable?t)?{ ??
  • ????????????throw?Throwables.propagate(t); ??
  • ????????} ??
  • ????} ??
  • }??
  • package com.ociweb.jnb.apr2010;import com.google.common.base.Throwables;import java.io.InputStream; import java.net.URL;public class ExerciseThrowables {public static void main(String[] args) {try {URL url = new URL("http://ociweb.com");final InputStream in = url.openStream();// read from the input streamin.close();} catch (Throwable t) {throw Throwables.propagate(t);}} }



    Multimap用法整理(http://jnb.ociweb.com/jnb/jnbApr2008.html):
    用來統(tǒng)計多值出現(xiàn)的頻率:

    Java代碼 ?
  • Multimap<Integer,?String>?siblings?=?Multimaps.newHashMultimap(); ??
  • siblings.put(0,?"Kenneth"); ??
  • siblings.put(1,?"Joe"); ??
  • siblings.put(2,?"John"); ??
  • siblings.put(3,?"Jerry"); ??
  • siblings.put(3,?"Jay"); ??
  • siblings.put(5,?"Janet"); ??
  • ??
  • for?(int?i?=?0;?i?<?6;?i++)?{ ??
  • ????int?freq?=?siblings.get(i).size(); ??
  • ????System.out.printf("%d?siblings?frequency?%d\n",?i,?freq); ??
  • }??
  • Multimap<Integer, String> siblings = Multimaps.newHashMultimap();siblings.put(0, "Kenneth");siblings.put(1, "Joe");siblings.put(2, "John");siblings.put(3, "Jerry");siblings.put(3, "Jay");siblings.put(5, "Janet");for (int i = 0; i < 6; i++) {int freq = siblings.get(i).size();System.out.printf("%d siblings frequency %d\n", i, freq);}


    輸出結(jié)果:

    引用 0 siblings frequency 1
    ??????? 1 siblings frequency 1
    ??????? 2 siblings frequency 1
    ??????? 3 siblings frequency 2
    ??????? 4 siblings frequency 0
    ??????? 5 siblings frequency 1



    Functions(閉包功能)

    Java代碼 ?
  • Function<String,?Integer>?strlen?=?new?Function<String,?Integer>()?{ ??
  • ????public?Integer?apply(String?from)?{ ??
  • ????????Preconditions.checkNotNull(from); ??
  • ????????return?from.length(); ??
  • ????} ??
  • }; ??
  • List<String>?from?=?Lists.newArrayList("abc",?"defg",?"hijkl"); ??
  • List<Integer>?to?=?Lists.transform(from,?strlen); ??
  • for?(int?i?=?0;?i?<?from.size();?i++)?{ ??
  • ????System.out.printf("%s?has?length?%d\n",?from.get(i),?to.get(i)); ??
  • } ??
  • Function<String, Integer> strlen = new Function<String, Integer>() {public Integer apply(String from) {Preconditions.checkNotNull(from);return from.length();}};List<String> from = Lists.newArrayList("abc", "defg", "hijkl");List<Integer> to = Lists.transform(from, strlen);for (int i = 0; i < from.size(); i++) {System.out.printf("%s has length %d\n", from.get(i), to.get(i));}}



    不過這種轉(zhuǎn)換是在訪問元素的時候才進行, 下面的例子可以說明:

    Java代碼 ?
  • Function<String,?Boolean>?isPalindrome?=?new?Function<String,?Boolean>()?{ ??
  • ????public?Boolean?apply(String?from)?{ ??
  • ????????Preconditions.checkNotNull(from); ??
  • ????????return?new?StringBuilder(from).reverse().toString().equals(from); ??
  • ????} ??
  • }; ??
  • List<String>?from?=?Lists.newArrayList("rotor",?"radar",?"hannah",?"level",?"botox"); ??
  • List<Boolean>?to?=?Lists.transform(from,?isPalindrome); ??
  • for?(int?i?=?0;?i?<?from.size();?i++)?{ ??
  • ????System.out.printf("%s?is%sa?palindrome\n",?from.get(i),?to.get(i)???"?"?:?"?NOT?"); ??
  • }? ??
  • //?changes?in?the?"from"?list?are?reflected?in?the?"to"?list ??
  • System.out.printf("\nnow?replace?hannah?with?megan...\n\n"); ??
  • from.set(2,?"megan"); ??
  • for?(int?i?=?0;?i?<?from.size();?i++)?{ ??
  • ????System.out.printf("%s?is%sa?palindrome\n",?from.get(i),?to.get(i)???"?"?:?"?NOT?"); ??
  • } ??
  • ?

    總結(jié)

    以上是生活随笔為你收集整理的Google Guava 库用法整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    国产福利中文字幕 | 在线视频欧美日韩 | 91亚洲精品乱码久久久久久蜜桃 | 91精品系列| 人人插人人舔 | 欧美日产一区 | av超碰在线 | 亚洲成人精品影院 | 国产午夜精品福利视频 | 91久久国产自产拍夜夜嗨 | 欧美精品一区二区免费 | 精品久久久久久久久久久久久久久久久久 | 久久久久欠精品国产毛片国产毛生 | 香蕉视频在线播放 | 中文字幕高清 | 国产一级片网站 | 国产欧美高清 | 久久爱www.| 久久夜色精品国产亚洲aⅴ 91chinesexxx | 操操操日日 | 天天在线操 | 国产精品色视频 | 亚洲精品视频免费 | 91秒拍国产福利一区 | 国产成人久久 | 国产一区在线视频播放 | 日本三级在线观看中文字 | av电影不卡 | 成人av电影免费 | 日韩欧美在线综合网 | 91色影院| 日韩av电影免费在线观看 | 91香蕉视频在线下载 | 99在线观看免费视频精品观看 | 日韩精品久久久久久久电影竹菊 | 一性一交视频 | 日本护士三级少妇三级999 | 波多野结衣在线观看一区二区三区 | 99日精品 | 免费黄色在线播放 | 808电影免费观看三年 | 国产亚洲综合性久久久影院 | 亚洲综合爱 | 在线亚洲精品 | 婷婷丁香在线 | 色综合婷婷 | 久久综合给合久久狠狠色 | 日韩中文字幕一区 | 国产精品欧美 | 国产视频二区三区 | 日本在线观看黄色 | 成年一级片 | 日本福利视频在线 | 久久99亚洲精品久久 | 手机看片99 | 久久久久国 | 69欧美视频 | 麻豆视频在线免费看 | 日本韩国精品在线 | 久一久久 | 在线免费观看国产 | 国产三级午夜理伦三级 | 国产精品永久 | 国产精品9区 | 日韩亚洲国产精品 | 九九免费观看全部免费视频 | 免费视频91| 久久99视频精品 | 韩国精品在线 | 亚洲精品视频观看 | 九色免费视频 | 欧美日韩免费一区 | 欧美日韩一区三区 | 国产一级在线观看视频 | 欧美性性网 | 91精品视频免费看 | 久久免费在线视频 | 成人免费一区二区三区在线观看 | 少妇资源站 | 久久黄色免费 | 综合中文字幕 | 国产在线精品国自产拍影院 | 日韩理论在线 | 日本三级人妇 | 999久久精品 | 欧美日韩免费在线观看视频 | 国产极品尤物在线 | 亚洲欧美乱综合图片区小说区 | 国产精品99久久久久久小说 | 99视| 综合色站导航 | 久久免费看a级毛毛片 | 亚洲国产激情 | 97在线公开视频 | 香蕉影视 | 91一区在线观看 | 国产精品高清在线 | 丁香五月网久久综合 | 看国产黄色大片 | 可以免费观看的av片 | 91免费的视频在线播放 | 97精品国自产拍在线观看 | 97视频在线免费观看 | 久草国产在线 | 成人在线观看影院 | 日韩视频三区 | 激情五月综合网 | 99视频在线观看一区三区 | 国产精品永久在线观看 | 亚洲国产精品久久久久婷婷884 | 伊人五月天综合 | 婷婷精品国产欧美精品亚洲人人爽 | 日本在线观看视频一区 | 久久成人国产精品免费软件 | 午夜在线观看影院 | 色婷丁香 | 久久人人爽人人爽 | 久草香蕉在线 | 91九色国产 | 亚洲国产精品成人精品 | 国内成人精品2018免费看 | 91亚洲国产成人 | 国产日韩欧美在线观看视频 | 在线免费观看国产 | 日韩av手机在线观看 | 国产精品96久久久久久吹潮 | 国产黄色一级大片 | 亚洲九九影院 | 国产免费观看视频 | 亚洲国产一区av | 亚洲精品国偷自产在线99热 | 狠狠操操操 | www国产亚洲 | 福利久久久 | 久久国产片| 福利片免费看 | 免费国产在线视频 | www看片网站 | av经典在线 | 蜜桃传媒一区二区 | 国内精品小视频 | 国产理论免费 | 午夜精品久久久久久久99无限制 | 五月综合激情 | 国产18精品乱码免费看 | 欧美日韩在线精品一区二区 | 精品一区二区亚洲 | 福利视频在线看 | 不卡视频在线 | 最近日本字幕mv免费观看在线 | 综合久久综合久久 | 日日操天天操狠狠操 | 国产精品乱码高清在线看 | 一区二区三区电影大全 | 国产精品一区二区三区免费视频 | 日韩理论片中文字幕 | 久久久精品影视 | 亚洲成av| 在线视频一区观看 | 亚洲一区二区精品3399 | 日韩女同av| 国产手机在线视频 | 成人午夜电影网 | 欧美日韩亚洲国产一区 | 最新成人av | 久久久高清视频 | 99视频精品免费观看, | 日韩久久久久久久 | 国产亚洲精品精品精品 | 狠狠干网站| 欧美精品在线观看 | www视频免费在线观看 | 国产黄色大全 | 肉色欧美久久久久久久免费看 | 国产免费久久 | 日韩黄色影院 | 麻豆视频免费在线播放 | 最新中文字幕在线观看视频 | 欧美va日韩va | 国产拍揄自揄精品视频麻豆 | 欧美成人在线免费 | 在线视频日韩精品 | 少妇精品久久久一区二区免费 | 日韩色在线 | 九九影视理伦片 | 婷婷亚洲综合五月天小说 | av成人免费在线 | 天天色婷婷 | 免费视频三区 | 精品伊人久久久 | 欧美成人中文字幕 | 天天干天天拍天天操天天拍 | 久久99国产精品视频 | 亚洲精品一区二区精华 | 黄色天堂在线观看 | 国产一区二区观看 | 色成人亚洲 | 五月综合激情 | 中文字幕在线乱 | 中文字幕 国产视频 | 久二影院 | 免费观看黄色12片一级视频 | 成人av资源站 | 日韩视频免费观看高清完整版在线 | 91视频在线| 亚洲作爱 | www黄在线 | www.天天操.com | 国产精品一区久久久久 | 国产精品黄网站在线观看 | 久久免费成人网 | 韩国一区二区在线观看 | 精品亚洲va在线va天堂资源站 | 国产91在线观看 | 99久久精 | 国产午夜不卡 | 超碰人人91| 狠狠躁夜夜av | 久久精彩视频 | 国产精品女主播一区二区三区 | 色综合天天做天天爱 | 亚洲黄色在线观看 | 香蕉视频在线免费 | 亚洲精品一区二区三区四区高清 | 亚洲人成人天堂h久久 | 色爽网站 | 久久天| 久久久久久久国产精品影院 | 五月婷婷丁香综合 | 国产精品久久久久久久久久 | 丁香久久婷婷 | 国产尤物一区二区三区 | www久久久 | 天天搞天天干天天色 | 瑞典xxxx性hd极品 | 伊人久久精品久久亚洲一区 | 日韩在线观看免费 | 国产精品成人久久 | 成人av电影在线观看 | 亚洲少妇xxxx | 久久免费视频3 | 亚洲精品乱码久久久久久蜜桃不爽 | 手机在线日韩视频 | 亚洲国产偷| 波多野结衣久久资源 | www.狠狠| 久久久网站| 国产精品入口久久 | 日韩欧美在线综合网 | 日韩特级毛片 | 国产专区第一页 | 精品一区二区在线观看 | 日韩精品一区二区在线观看 | 日韩在线资源 | 欧美a影视| 免费三级影片 | 天天干人人插 | 97热视频| 香蕉一区 | 国产v亚洲v | 高清有码中文字幕 | 国产精品18久久久久久久久久久久 | 99热这里只有精品在线观看 | 久久国产精品网站 | 91精品国自产在线观看 | 国产精品99久久久久久有的能看 | 欧美成人手机版 | 欧美日韩国产亚洲乱码字幕 | 中文av在线天堂 | 欧美三级免费 | 黄色国产高清 | 免费黄a | 成人午夜电影网站 | 免费亚洲电影 | 免费在线成人 | 精品国产理论片 | 欧美日本不卡视频 | 九九影视理伦片 | 国产专区一 | 欧美人体xx| 久久999精品| 在线观看免费观看在线91 | 91视频免费看网站 | 亚洲国产电影在线观看 | 黄色tv视频| 久久影院亚洲 | 国产美女视频一区 | 久草在线手机视频 | www久久com| 久久狠狠婷婷 | 国产精品麻豆91 | 亚洲精品一区二区三区在线观看 | 欧美人zozo| 国产精品精品久久久久久 | 成人国产精品免费 | 911免费视频 | 免费看的av片 | 五月综合色婷婷 | 午夜精品久久久久久99热明星 | 亚洲综合激情 | 在线亚洲高清视频 | 91中文字幕在线播放 | 天天要夜夜操 | 黄色精品国产 | 亚洲成av人片在线观看无 | 中文字幕免费久久 | 久久免费电影网 | 久久精品婷婷 | 青春草国产视频 | 亚洲在线 | 精品1区二区 | 国产精品精品国产婷婷这里av | 国产精品久久电影观看 | 99国产精品久久久久老师 | 欧美精品你懂的 | 国产精品成人一区 | 国产只有精品 | 四虎影视成人永久免费观看亚洲欧美 | www.国产视频 | 国产视频2 | 综合天天色 | 精品国产综合区久久久久久 | 夜夜爽天天爽 | 中文字幕字幕中文 | 日韩在线精品 | 久久久毛片 | www最近高清中文国语在线观看 | 永久免费的av电影 | 手机看片国产日韩 | 亚洲精品永久免费视频 | 一级片黄色片网站 | 欧美电影黄色 | 中文字幕精品三区 | 日韩在线视频不卡 | 国产精品九九久久99视频 | 手机看片 | 国内小视频| 嫩草av在线 | 人人网人人爽 | 免费看三片 | 久热免费在线观看 | 欧美日韩一区二区三区在线观看视频 | 99在线精品视频观看 | 国产免费片| 四虎视频 | 青青河边草免费观看完整版高清 | 91精品免费视频 | 五月天激情视频在线观看 | 日韩久久精品一区二区 | 开心激情网五月天 | 欧美a在线免费观看 | 精品国产免费一区二区三区五区 | 亚洲欧洲成人 | 久久这里只精品 | 国产精品久久久久久久婷婷 | 日韩欧美视频在线观看免费 | 欧美成人999| 天天要夜夜操 | 探花视频在线观看免费版 | 一区二区av | 欧美成人在线免费 | 国产成人一区二区三区在线观看 | 91麻豆精品91久久久久同性 | 欧美日韩在线观看视频 | 九色91福利| 中文字幕视频观看 | 久久久91精品国产一区二区精品 | 深夜国产福利 | 夜色资源网 | 99视频网站 | 日韩在线观看第一页 | 伊人久在线 | 99精品视频在线观看 | 天天射综合 | 黄色免费大片 | 亚洲精品福利在线 | 国产这里只有精品 | 中文字幕人成人 | 欧美日韩免费在线视频 | 成人av一区二区三区 | 黄色官网在线观看 | 国产色视频一区 | 日韩国产精品毛片 | 国产黄在线 | 免费黄色看片 | 日韩视频一区二区在线 | 操操操干干干 | 欧美日韩视频观看 | 久久亚洲精品电影 | 国产拍在线 | 国产免费大片 | 一级精品视频在线观看宜春院 | 中文字幕在线人 | 成人9ⅰ免费影视网站 | 国产一级性生活视频 | 欧美一级片在线观看视频 | 国产999精品视频 | 美女黄视频免费看 | 看av免费 | 日韩在线视| 一区二区电影在线观看 | 亚洲一级黄色 | 中文字幕 成人 | 一本一本久久a久久精品综合小说 | 在线观看精品一区 | 美女av免费 | 免费在线色电影 | 国产中文字幕国产 | 国产99黄| 99在线精品免费视频九九视 | 操一草| 国产又粗又猛又黄视频 | 日本久久久亚洲精品 | 最近中文字幕高清字幕免费mv | 福利一区二区在线 | 视频三区在线 | 婷婷在线网 | 日韩精品久久一区二区三区 | 成人免费在线电影 | 麻豆精品在线 | 国产日韩欧美网站 | 国内视频在线观看 | 国内精品视频在线播放 | 国产精品色婷婷视频 | 国产区免费 | 天天插狠狠插 | 最近日本字幕mv免费观看在线 | 国产女人18毛片水真多18精品 | 亚洲成av人片 | 五月婷婷中文字幕 | 国产在线观看a | 亚洲美女精品区人人人人 | 91成人网在线观看 | 午夜精品99久久免费 | 久久久免费少妇 | 中文字幕一区二区三区在线视频 | av亚洲产国偷v产偷v自拍小说 | 亚洲精品久久久蜜桃直播 | 在线观看黄色 | 欧美在线观看视频一区二区三区 | 欧洲av不卡 | www.久久久| 国产精品高潮久久av | 91九色成人蝌蚪首页 | 97视频一区 | 美女黄色网在线播放 | 制服丝袜成人在线 | 国产成人精品一区二区三区免费 | 在线观看不卡视频 | 视频一区二区在线观看 | 天天操天天摸天天射 | 久久超级碰视频 | 91成人精品一区在线播放69 | 最新婷婷色 | 久久久久久久看片 | av网址aaa| 99精品久久久 | 国产真实精品久久二三区 | 99精品国产福利在线观看免费 | 丁香婷婷电影 | 亚州av免费| 三级av中文字幕 | 在线一二三四区 | 国产精品av一区二区 | 国产群p视频 | 91色一区二区三区 | 天天干天天干天天 | 麻豆国产视频下载 | 在线观看av不卡 | 亚洲国产精彩中文乱码av | 久久婷五月 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 超碰人人做 | 日日夜夜天天干 | 91在线播放视频 | 亚洲国内精品在线 | 91av播放| 在线中文字幕电影 | 美女免费视频黄 | 亚洲情影院| 国产xxxx性hd极品 | 在线观看亚洲视频 | 国产精品女同一区二区三区久久夜 | 亚洲婷婷伊人 | av噜噜噜在线播放 | 久久精品久久综合 | 91高清不卡| 久久成人国产精品入口 | 国产精品麻豆99久久久久久 | 黄色毛片一级 | 国产 日韩 在线 亚洲 字幕 中文 | 欧美在线视频一区二区三区 | 国产91小视频 | 国产精品久久久久av免费 | 在线 影视 一区 | 在线看成人 | 国产亚洲人成网站在线观看 | 色午夜 | 免费av网站观看 | 久久官网 | 日韩中文字幕免费视频 | 99视频精品全部免费 在线 | 亚洲色综合 | 精品国产伦一区二区三区观看方式 | 一区三区视频在线观看 | 精品视频久久 | 色婷婷av在线 | 超碰国产在线观看 | 在线国产一区二区 | 中文字幕在线观看视频免费 | 在线观看国产高清视频 | 国产精品黄色影片导航在线观看 | 一区二区在线影院 | 精品国产黄色片 | 91原创在线观看 | 亚洲欧美国产精品久久久久 | 一区二区三区在线免费 | 欧美日韩在线播放 | 毛片www | 91免费网 | 国产色视频网站 | 免费看片成年人 | 伊人久久五月天 | 午夜精品视频免费在线观看 | 色视频网站在线观看一=区 a视频免费在线观看 | 国产成人精品久久 | 国产精品久久久久久久久搜平片 | 一区二区三区中文字幕在线 | 四虎影视成人精品国库在线观看 | 97超级碰 | 欧洲精品久久久久毛片完整版 | 亚洲天堂网站 | 国产一区二区在线免费观看 | 一区二区三区在线观看中文字幕 | av免费在线观 | 人人舔人人 | 国产91在线播放 | 欧美午夜理伦三级在线观看 | 国产精品成人av电影 | 国产97在线播放 | 91视频大全 | 国产97av | 亚洲 欧洲 国产 日本 综合 | 91精品网站 | 成人午夜电影在线观看 | 欧美日韩精品电影 | 婷婷色综| 亚洲国产精品人久久电影 | 天堂在线视频中文网 | 四虎www. | 激情五月婷婷激情 | 中国精品少妇 | 国产日产精品一区二区三区四区 | 在线观看中文字幕亚洲 | 中文字幕网站视频在线 | 综合天天 | 黄色av大片 | 久久国产精品一国产精品 | 久久国产精品免费 | 婷婷久久一区 | 在线观看av中文字幕 | 四虎永久精品在线 | av电影av在线 | 欧美贵妇性狂欢 | 99精品国产一区二区三区不卡 | 久久免费片 | 国产成人精品综合久久久 | 超碰免费在线公开 | 国产精品麻豆视频 | 久久99热这里只有精品 | 91av影视 | 婷婷综合电影 | 久久电影国产免费久久电影 | 亚洲无吗天堂 | 成人在线超碰 | 国产精品久久久久久久久久白浆 | 精品久久久亚洲 | 91在线区| 欧美一区二视频在线免费观看 | 精品视频免费观看 | 国产免费美女 | av电影免费在线看 | 欧美日韩国产精品一区二区 | 欧美一级片免费 | www色综合 | 亚洲aⅴ一区二区三区 | av一本久道久久波多野结衣 | 久久免费观看少妇a级毛片 久久久久成人免费 | 色综合久久久久综合体 | 日韩av成人在线 | 超碰在线天天 | 天堂久久电影网 | 在线观看免费福利 | 操操色| 日韩欧美在线高清 | 亚洲电影在线看 | 日日操天天操夜夜操 | 欧洲亚洲精品 | 免费高清在线观看成人 | 天天操欧美 | 99热手机在线| 天天玩天天干天天操 | 欧美性极品xxxx做受 | 免费观看国产视频 | 久久久久国产精品免费网站 | 黄色三几片 | 久草国产视频 | 中国精品少妇 | 一二区电影| 一区二区三区国产精品 | 99热精品视 | 91九色蝌蚪国产 | 91看片淫黄大片在线播放 | 国产成人av福利 | 日韩一级成人av | 久久91久久久久麻豆精品 | 美女网站视频免费黄 | a在线v| 亚洲精品在线一区二区三区 | 国产精品字幕 | h文在线观看免费 | 激情丁香综合五月 | 日韩女同av | 一区二区三区日韩在线 | 97看片吧 | 久久福利小视频 | 波多野结衣综合网 | 免费在线中文字幕 | 黄色免费电影网站 | 日本精品视频在线观看 | 欧美综合在线视频 | 欧美天天干| 久久久久麻豆v国产 | 久久免费黄色网址 | 玖玖色在线观看 | 国产美女无遮挡永久免费 | 在线观看自拍 | 97视频在线播放 | 在线观看免费中文字幕 | 奇米影视在线99精品 | 四虎成人免费观看 | 韩国一区视频 | 亚洲在线精品 | 成人小视频免费在线观看 | 一区二区欧美日韩 | 欧美做受69 | 六月婷婷久香在线视频 | 日本少妇高清做爰视频 | 午夜精品久久久久久久99热影院 | 精品国产乱码久久久久久天美 | 草免费视频 | 国产色资源 | 最新三级在线 | 成人资源网 | 草免费视频 | 亚洲片在线观看 | 国产精品永久在线 | 91av片| 美州a亚洲一视本频v色道 | 天天综合视频在线观看 | 在线观看黄色免费视频 | 精品久久久久一区二区国产 | 日韩欧美高清 | 久久久久日本精品一区二区三区 | 久久欧美精品 | 亚洲免费国产 | 亚洲日韩欧美一区二区在线 | 五月丁婷婷 | 欧美日韩在线播放一区 | 亚洲va欧洲va国产va不卡 | 国产精品密入口果冻 | 天天干天天看 | 91av在线精品| 日韩一区视频在线 | 欧美日韩一区二区免费在线观看 | 日日爱999 | 国产精品麻豆果冻传媒在线播放 | 日韩欧美高清在线观看 | 国内精品久久久久久久 | 五月婷婷六月丁香在线观看 | 综合在线亚洲 | www178ccom视频在线 | 久久精品国产精品亚洲精品 | 欧美一区二区免费在线观看 | 91天天视频 | 日韩av中文字幕在线免费观看 | 亚洲欧洲视频 | 久久综合成人 | www.av中文字幕.com | 成人av在线影院 | 激情黄色一级片 | 欧美一级免费 | 最近日本mv字幕免费观看 | 久久精品国产成人 | 久久久久二区 | 国产精品九九久久99视频 | 91成人免费看片 | 天天综合操 | 亚洲精品三级 | 欧美激情精品久久久久久免费印度 | 日韩av看片 | 亚洲精品视| 免费高清男女打扑克视频 | 日日夜夜网 | 国产高清绿奴videos | 国产精品久久久久久久免费观看 | 亚洲影院一区 | 亚洲综合激情网 | 99草视频 | 在线观看深夜视频 | 日日婷婷夜日日天干 | 99热这里只有精品免费 | 国产精品久久久久永久免费 | 中文字幕在线第一页 | 日韩免费高清在线观看 | 日韩av中文在线 | a级国产乱理论片在线观看 特级毛片在线观看 | 美女网站在线观看 | 国产探花| 三级免费黄 | 日韩二级毛片 | 免费一级特黄录像 | 国产日韩中文在线 | 久久69av| 国产午夜激情视频 | 成人91在线观看 | 91在线产啪| 91av视频在线观看免费 | 久久精品美女视频 | 日韩一级成人av | 人人插人人艹 | 亚洲精品动漫成人3d无尽在线 | 久久久国产精品成人免费 | 国产精品成人一区二区三区吃奶 | 91黄色影视 | 夜色在线资源 | 亚洲综合精品在线 | 日日摸日日碰 | 91精品视频一区二区三区 | 国内成人精品2018免费看 | 91污视频在线观看 | 国内精品久久久久影院优 | 国产精品成人一区二区三区吃奶 | 精品国产1区2区3区 国产欧美精品在线观看 | 欧美精品一区二区在线观看 | 国产亚州精品视频 | 日韩在线视频线视频免费网站 | 成人在线观看你懂的 | 中文字幕久久精品一区 | 五月婷丁香 | 波多野结衣电影一区二区三区 | 国产麻豆果冻传媒在线观看 | 黄色成人免费电影 | 欧美极品xxxx| 久久久色| 亚洲天堂精品视频在线观看 | 国产成人性色生活片 | 久久久久久美女 | 精品国产aⅴ一区二区三区 在线直播av | 日韩精品一区二区三区丰满 | 欧美一区二区三区免费看 | 精品久久九九 | 国产精品激情 | 日韩欧美网址 | 日韩欧美在线不卡 | 日日夜夜av| 久久久久久美女 | 西西4444www大胆艺术 | 国产一区二区免费在线观看 | 久久躁日日躁aaaaxxxx | 少妇bbb搡bbbb搡bbbb′ | 免费色视频网站 | 国产视频亚洲精品 | 亚洲涩涩一区 | 天天干天天干天天射 | 日韩成人一级大片 | 中文字幕丰满人伦在线 | 日韩午夜精品福利 | 91在线网址 | 最近免费中文字幕大全高清10 | 国产在线一区观看 | av中文字幕电影 | 最新av在线播放 | 成人综合婷婷国产精品久久免费 | 91av原创| 天天艹天天操 | 美女亚洲精品 | 激情五月婷婷网 | 天天干视频在线 | 色综合天天视频在线观看 | 超碰公开97| 久久影视一区二区 | 中文字幕资源在线 | 九九综合九九综合 | 久久综合久久八八 | 国产高清不卡在线 | 久久刺激视频 | 国产午夜精品一区二区三区在线观看 | 久久一级电影 | 亚洲视频免费在线 | 91高清视频 | 2022久久国产露脸精品国产 | 天天久久综合 | 激情影院在线 | 成人午夜在线电影 | 精品国产黄色片 | 欧美日韩免费看 | 久久精品国产一区二区电影 | 激情综合网五月激情 | 毛片永久免费 | av中文字幕在线免费观看 | 久久久久久久久久久久久9999 | 免费的国产精品 | 欧美福利片在线观看 | 99视频国产在线 | 成人免费共享视频 | 国产亚洲视频中文字幕视频 | www.久久久 | 黄色av播放 | 久久人人插 | 精品一区二区久久久久久久网站 | 韩国三级在线一区 | 成人aⅴ视频| 日韩在线免费观看视频 | 天天操天天色天天射 | 亚洲国产成人久久 | 色婷婷www | 中文字幕色网站 | 欧美日韩精品电影 | 精品欧美乱码久久久久久 | 久久精品久久精品久久精品 | 九色精品 | 91精品国| 国模精品在线 | 国产糖心vlog在线观看 | 黄色小视频在线观看免费 | 91精品久久久久 | 日韩av资源在线观看 | 亚洲国产经典视频 | 亚洲一区av | 国产精品欧美日韩 | 国产精品欧美久久久久天天影视 | 91精品国产综合久久婷婷香蕉 | 免费在线观看av网站 | 日日夜夜网 | 女人高潮特级毛片 | 干干夜夜 | 综合五月婷婷 | 国产伦精品一区二区三区免费 | 综合久久久久久久 | 久久久亚洲电影 | 97人人人人 | 99久久精品久久久久久动态片 | 国产999久久久 | 国产成人精品av久久 | 999久久精品 | 精品视频国产一区 | 久久精品中文字幕一区二区三区 | 香蕉视频免费在线播放 | 久久婷婷色综合 | 在线观看日韩国产 | 91禁看片 | 日本女人在线观看 | 亚洲五月激情 | 91久久在线观看 | 黄色成人av网址 | 91人人爽人人爽人人精88v | 成人午夜电影在线播放 | 日韩av影片在线观看 | 中文字幕日本特黄aa毛片 | 麻豆91网站 | 啪嗒啪嗒免费观看完整版 | 欧美在线free | 在线观看黄网站 | 日韩精品一区不卡 | 97在线超碰 | 成人wwwxxx视频 | 欧美亚洲另类在线视频 | 国产a国产 | 亚洲码国产日韩欧美高潮在线播放 | av在线电影播放 | 色香天天 | 国产人成看黄久久久久久久久 | 超碰人人在 | 日韩久久精品一区二区 | 超碰九九| 粉嫩av一区二区三区入口 | 午夜国产影院 | 九9热这里真品2 | 超碰精品在线 | 激情五月婷婷激情 | 久久97超碰 | 亚洲精品玖玖玖av在线看 | 天天射天天射天天 | 波多野结衣视频一区二区三区 | 成人欧美亚洲 | 九九久久久久久久久激情 | 一区二区 不卡 | 午夜av在线播放 | 人人澡人人澡人人 | 在线观看日本高清mv视频 | 成人av亚洲 | 久99久在线视频 | 91视频国产高清 | 一二三久久久 | 91成人亚洲 | 丁香婷婷综合激情 | 国产精品视频99 | 中文字幕视频观看 | 狠狠干夜夜爱 | 在线一区av | 亚洲精品av中文字幕在线在线 | 五月激情丁香图片 | 天天插天天爽 | 国产精品videoxxxx | 日本在线成人 | 黄色网www| 久草国产在线 | 美女视频黄免费网站 | www.91成人| 在线视频成人 | 91久久精品日日躁夜夜躁国产 | 一区二区三区视频 | 99热 精品在线| 中文字幕在线视频一区二区 | 97人人模人人爽人人少妇 | 亚洲午夜久久久影院 | 亚洲精品视频二区 | 亚洲精品在线观 | 狠狠狠色丁香婷婷综合久久88 | 高清精品久久 | 欧美专区日韩专区 | 久久精品视频免费观看 | 日本午夜在线亚洲.国产 | 久久免费大片 | 日日碰狠狠添天天爽超碰97久久 | 亚洲精品美女久久 | 欧美久久久久久 | 伊人亚洲综合网 | 亚洲午夜久久久久 | 色综合久久天天 | 久久久精品影视 | 免费a级毛片在线看 | 久久99国产视频 | 在线精品亚洲一区二区 | 久久精品一| 日韩在线视频一区 | 黄色小说网站在线 | 99久久综合狠狠综合久久 | 久久久久久久久久久久国产精品 | 黄色片网站免费 | 免费成人av电影 | 天天操操操操操 | 97成人精品视频在线播放 | 中文字幕在线乱 | 久久久99精品免费观看乱色 | 中文字幕 成人 | 免费在线观看成人小视频 | 4438全国亚洲精品观看视频 | 亚洲一区不卡视频 | 日韩 在线a | 91av短视频 | 精品一区二区综合 | 日韩视频中文字幕在线观看 | 超碰人人91 | 亚洲精品中文字幕在线 | 丁香综合av | 尤物97国产精品久久精品国产 | 婷婷色资源 | 最近久乱中文字幕 | 欧美另类z0zx | 国产不卡一区二区视频 | 久久免费av电影 | 久久精品99国产精品亚洲最刺激 | 国产成人a亚洲精品v | 狠狠色丁香婷婷综合视频 | 色中色综合 | 91丨九色丨蝌蚪丰满 | 免费观看一级特黄欧美大片 | 一区二区三区污 | 狠狠操天天射 | 狠狠干免费| 久久精品国产精品亚洲 | 久久精品综合视频 | 久久国产一区二区三区 | 精品亚洲视频在线 | 欧美日韩大片在线观看 | 91av网址| 麻花豆传媒mv在线观看 | 91av视频| 日韩av电影国产 | 精品免费国产一区二区三区四区 | 亚洲丁香日韩 | 高清不卡免费视频 | 欧美精品乱码久久久久久 | 国产精品久久电影网 | 在线看国产一区 | 最新免费中文字幕 |