From 3425c26a100c97eb2b39d369b04c4263635b4f80 Mon Sep 17 00:00:00 2001 From: bulejava Date: Wed, 6 May 2015 17:58:44 +0800 Subject: [PATCH 01/10] project --- guava-tutorials/.classpath | 26 +++++++++++++ guava-tutorials/.gitignore | 1 + guava-tutorials/.project | 23 +++++++++++ .../org.eclipse.core.resources.prefs | 4 ++ .../.settings/org.eclipse.jdt.core.prefs | 5 +++ .../.settings/org.eclipse.m2e.core.prefs | 4 ++ guava-tutorials/pom.xml | 25 ++++++++++++ .../java/com/putsoft/guava_tutorials/App.java | 13 +++++++ .../com/putsoft/guava_tutorials/AppTest.java | 38 +++++++++++++++++++ 9 files changed, 139 insertions(+) create mode 100644 guava-tutorials/.classpath create mode 100644 guava-tutorials/.gitignore create mode 100644 guava-tutorials/.project create mode 100644 guava-tutorials/.settings/org.eclipse.core.resources.prefs create mode 100644 guava-tutorials/.settings/org.eclipse.jdt.core.prefs create mode 100644 guava-tutorials/.settings/org.eclipse.m2e.core.prefs create mode 100644 guava-tutorials/pom.xml create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava_tutorials/App.java create mode 100644 guava-tutorials/src/test/java/com/putsoft/guava_tutorials/AppTest.java diff --git a/guava-tutorials/.classpath b/guava-tutorials/.classpath new file mode 100644 index 000000000000..35bca5eaed5f --- /dev/null +++ b/guava-tutorials/.classpath @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/guava-tutorials/.gitignore b/guava-tutorials/.gitignore new file mode 100644 index 000000000000..ea8c4bf7f35f --- /dev/null +++ b/guava-tutorials/.gitignore @@ -0,0 +1 @@ +/target diff --git a/guava-tutorials/.project b/guava-tutorials/.project new file mode 100644 index 000000000000..c5ea52b36cbb --- /dev/null +++ b/guava-tutorials/.project @@ -0,0 +1,23 @@ + + + guava-tutorials + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/guava-tutorials/.settings/org.eclipse.core.resources.prefs b/guava-tutorials/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000000..4c28b1a898a0 --- /dev/null +++ b/guava-tutorials/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/guava-tutorials/.settings/org.eclipse.jdt.core.prefs b/guava-tutorials/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000000..8626026241ca --- /dev/null +++ b/guava-tutorials/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/guava-tutorials/.settings/org.eclipse.m2e.core.prefs b/guava-tutorials/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 000000000000..14b697b7bbb0 --- /dev/null +++ b/guava-tutorials/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/guava-tutorials/pom.xml b/guava-tutorials/pom.xml new file mode 100644 index 000000000000..c76671c09043 --- /dev/null +++ b/guava-tutorials/pom.xml @@ -0,0 +1,25 @@ + + 4.0.0 + + com.putsoft + guava-tutorials + 0.0.1-SNAPSHOT + jar + + guava-tutorials + http://maven.apache.org + + + UTF-8 + + + + + junit + junit + 3.8.1 + test + + + diff --git a/guava-tutorials/src/main/java/com/putsoft/guava_tutorials/App.java b/guava-tutorials/src/main/java/com/putsoft/guava_tutorials/App.java new file mode 100644 index 000000000000..ccc3f00fbfc5 --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava_tutorials/App.java @@ -0,0 +1,13 @@ +package com.putsoft.guava_tutorials; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} diff --git a/guava-tutorials/src/test/java/com/putsoft/guava_tutorials/AppTest.java b/guava-tutorials/src/test/java/com/putsoft/guava_tutorials/AppTest.java new file mode 100644 index 000000000000..5d509395dda3 --- /dev/null +++ b/guava-tutorials/src/test/java/com/putsoft/guava_tutorials/AppTest.java @@ -0,0 +1,38 @@ +package com.putsoft.guava_tutorials; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} From e305134874e9aeb08c2f5a093b4080e7dd6d013f Mon Sep 17 00:00:00 2001 From: bulejava Date: Thu, 7 May 2015 16:23:50 +0800 Subject: [PATCH 02/10] TEST --- guava-tutorials/pom.xml | 9 +++ .../com/putsoft/guava/base/OptionalDemo.java | 59 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/base/OptionalDemo.java diff --git a/guava-tutorials/pom.xml b/guava-tutorials/pom.xml index c76671c09043..3c4cb041e10f 100644 --- a/guava-tutorials/pom.xml +++ b/guava-tutorials/pom.xml @@ -21,5 +21,14 @@ 3.8.1 test + + + com.google.guava +guava +18.0 + complie + + + diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/base/OptionalDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/base/OptionalDemo.java new file mode 100644 index 000000000000..bf9a09d92eb0 --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/base/OptionalDemo.java @@ -0,0 +1,59 @@ +package com.putsoft.guava.base; + +import java.util.ArrayList; +import java.util.List; + +import com.google.common.base.Function; +import com.google.common.base.Optional; + +public class OptionalDemo { + + + + public static void main(String[] args) { + + + Optional possible=Optional.of(1); + + //不为null 返回true + possible.isPresent(); + + //保证获取的不为null,为null则抛出异常 + possible.get(); + + //为了遍历使用,for(T obj:asSet) + possible.asSet(); + + //如果为null,则返回传入的值 + possible.or(5); + + //如果为null,则返回null + possible.orNull(); + + //创建为Absent 空对象,没有实际意义 + Optional.absent(); + + //如果实例为null,曾返回absent,如果不为null,则应由function转换 + possible.transform(new ObjectConver()); + + //如果为空 返回Absent + Optional.fromNullable(444); + Optional.fromNullable(null); + + List> list=new ArrayList>(); + //过滤一个容器里的null元素 + Optional.presentInstances(list); + + } + +} + +//类型转换 +class ObjectConver implements Function{ + + @Override + public Double apply(Integer input) { + return Double.valueOf(input); + } + +} From 3915efa8ce0ddfec58ebef26ada07fb52e6259eb Mon Sep 17 00:00:00 2001 From: "bulejava@126.com" Date: Thu, 7 May 2015 23:29:20 +0800 Subject: [PATCH 03/10] test --- .../.settings/org.eclipse.jdt.core.prefs | 13 +++++-- .../java/com/putsoft/guava_tutorials/App.java | 13 ------- .../com/putsoft/guava_tutorials/AppTest.java | 38 ------------------- 3 files changed, 10 insertions(+), 54 deletions(-) delete mode 100644 guava-tutorials/src/main/java/com/putsoft/guava_tutorials/App.java delete mode 100644 guava-tutorials/src/test/java/com/putsoft/guava_tutorials/AppTest.java diff --git a/guava-tutorials/.settings/org.eclipse.jdt.core.prefs b/guava-tutorials/.settings/org.eclipse.jdt.core.prefs index 8626026241ca..f4217b01dd2e 100644 --- a/guava-tutorials/.settings/org.eclipse.jdt.core.prefs +++ b/guava-tutorials/.settings/org.eclipse.jdt.core.prefs @@ -1,5 +1,12 @@ eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.5 +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/guava-tutorials/src/main/java/com/putsoft/guava_tutorials/App.java b/guava-tutorials/src/main/java/com/putsoft/guava_tutorials/App.java deleted file mode 100644 index ccc3f00fbfc5..000000000000 --- a/guava-tutorials/src/main/java/com/putsoft/guava_tutorials/App.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.putsoft.guava_tutorials; - -/** - * Hello world! - * - */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); - } -} diff --git a/guava-tutorials/src/test/java/com/putsoft/guava_tutorials/AppTest.java b/guava-tutorials/src/test/java/com/putsoft/guava_tutorials/AppTest.java deleted file mode 100644 index 5d509395dda3..000000000000 --- a/guava-tutorials/src/test/java/com/putsoft/guava_tutorials/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.putsoft.guava_tutorials; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} From 431c937a4ef0aa18f145920ed40d8a3150c8d20a Mon Sep 17 00:00:00 2001 From: "bulejava@126.com" Date: Thu, 7 May 2015 23:37:22 +0800 Subject: [PATCH 04/10] test --- .../com/putsoft/guava/base/OrderingDemo.java | 15 ++++++++ .../putsoft/guava/base/PreconditionsDemo.java | 38 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/base/PreconditionsDemo.java diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java new file mode 100644 index 000000000000..a8a446e0b6a8 --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java @@ -0,0 +1,15 @@ +package com.putsoft.guava.base; + +import com.google.common.collect.Ordering; + +public class OrderingDemo { + + public static void main(String[] args) { + + Ordering.natural(); + + + + } + +} diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/base/PreconditionsDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/base/PreconditionsDemo.java new file mode 100644 index 000000000000..d0a45affd832 --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/base/PreconditionsDemo.java @@ -0,0 +1,38 @@ +package com.putsoft.guava.base; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; + +import static com.google.common.base.Preconditions.checkElementIndex; +import static com.google.common.base.Preconditions.checkPositionIndex; +import static com.google.common.base.Preconditions.checkPositionIndexes; + + +public class PreconditionsDemo { + + public static void main(String[] args){ + + //检验参数 + //int i=-9; + //checkArgument(i >= 0, "Argument was %s but expected nonnegative", i); + + //判断是否为空 + //Object obj=null; + //checkNotNull(obj,"Argument was %s but expected nonnegative", obj); + + //对boolean进行判断 + //checkState(false); + + + checkElementIndex(5,5); + + checkPositionIndex(5,5); + + + //checkPositionIndexes(1,3,5); + + } + + +} From a87ea9953f1145bdd02027835dca58f0bd2f244f Mon Sep 17 00:00:00 2001 From: bulejava Date: Sat, 9 May 2015 01:41:44 +0800 Subject: [PATCH 05/10] order --- .../com/putsoft/guava/base/OrderingDemo.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java index a8a446e0b6a8..32e7336932aa 100644 --- a/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java +++ b/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java @@ -1,14 +1,56 @@ package com.putsoft.guava.base; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + import com.google.common.collect.Ordering; public class OrderingDemo { + + private static void p1(Collection list){ +/* for(Integer in:list){ + System.out.println(in); + }*/ + + System.out.println(list); + } public static void main(String[] args) { + List list=Arrays.asList(5,3,2,5,6,7); + //创建自然排序规则的排序器 + Ordering com=Ordering.natural(); + + //返回不排序的排序器,一般为了实例化排序器,调用其他成员函数 + Ordering o=Ordering.allEqual().nullsFirst(); + + List l=Arrays.asList("a","b","c","d","e","f","f"); + //List l=Arrays.asList("a","b","c","d","e",new String("f"),new String("f")); + //返回任意顺序的排序器,相同元素顺序保持不变,同一个JVM生命周期内保持排序顺序不变 + o=Ordering.arbitrary(); + System.out.println(o.sortedCopy(l)); + + List> ol=new ArrayList<>(); + ol.add(com); + //多条件排序,一般针对一个对象的多个属性进行排序 + Ordering.compound(ol); + + List el=Arrays.asList("钟","郭","陈","李"); + //自定义一种顺序,然后根据此顺序来排序,对于重复的比较有价值,或在数据存储在数据库, + //进行排序 + Ordering os=Ordering.explicit(el); - Ordering.natural(); + System.out.println(os.sortedCopy(Arrays.asList("陈","李","钟","李","陈","郭","郭"))); + //利用对象的tostring产生的字符串的排序器 + Ordering.usingToString(); + //操作的是list拷贝 + list=com.sortedCopy(list); + //Collections.sort(list,com); + p1(list); } From 653b7be05177b11b5879c0d560ffc9617441aa03 Mon Sep 17 00:00:00 2001 From: bulejava Date: Sat, 9 May 2015 23:46:31 +0800 Subject: [PATCH 06/10] doing --- .../com/putsoft/guava/base/OrderingDemo.java | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java index 32e7336932aa..a6dd4da27edb 100644 --- a/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java +++ b/guava-tutorials/src/main/java/com/putsoft/guava/base/OrderingDemo.java @@ -4,8 +4,10 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.List; +import com.google.common.collect.Lists; import com.google.common.collect.Ordering; public class OrderingDemo { @@ -47,6 +49,55 @@ public static void main(String[] args) { //利用对象的tostring产生的字符串的排序器 Ordering.usingToString(); + User u1=new User(2,"aa"); + + User u2=new User(2,"bb"); + + Ordering order=Ordering.from(new UserComparetor()).usingToString(); + + System.out.println(order.compare(u1,u2)); + + //使用比较器的List,以compare 返回0的规则寻找元素 + //order.binarySearch(sortedList, key) + + //根据已经排序好的List 从索引0开始取N个元素 + //order.leastOf(random, 7); + //根据已经排序好的List 从末尾开始取N个元素 + //order.greatestOf(iterable, k) + + + Comparator byLength = new Comparator() { + public int compare(String left, String right) { + return Integer.compare(left.length(), right.length()); + } + }; + + List random = Lists.newArrayList(null, "welcome", "to", + "leveluplunch", null, null); + + List firstTwo = Ordering.from(byLength).nullsLast() + .leastOf(random, 7); + + List firstTwo1 = Ordering.from(byLength).nullsLast() + .greatestOf(random, 7); + + System.out.println(firstTwo1); + + //移除了修改元素的接口 + // order.immutableSortedCopy(elements); + //是否根据某个排序器排序过 + //order.isOrdered(iterable) + // 排除了等于的情况 + // order.isStrictlyOrdered(iterable) + + //按字典排序,长的大于短的 + // order.lexicographical(); + //取最大值 + // order.max(iterable) + + //取最小值 + //order.min(); + //操作的是list拷贝 list=com.sortedCopy(list); //Collections.sort(list,com); @@ -55,3 +106,50 @@ public static void main(String[] args) { } } + +class UserComparetor implements Comparator{ + + + @Override + public int compare(User o1, User o2) { + if(o1.getAge()>o2.getAge()){ + return 1; + }else if(o1.getAge() Date: Sat, 9 May 2015 23:47:09 +0800 Subject: [PATCH 07/10] Object Throwsables --- .../com/putsoft/guava/base/ObjectDemo.java | 87 +++++++++++++++++++ .../putsoft/guava/base/ThrowablesDemo.java | 77 ++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/base/ObjectDemo.java create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/base/ThrowablesDemo.java diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/base/ObjectDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/base/ObjectDemo.java new file mode 100644 index 000000000000..c00ba1e70c22 --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/base/ObjectDemo.java @@ -0,0 +1,87 @@ +package com.putsoft.guava.base; + +import com.google.common.base.MoreObjects; +import com.google.common.base.Objects; +import com.google.common.collect.ComparisonChain; + +public class ObjectDemo { + + public static void main(String[] args) { +/* Person p=new Person("旺财"); + Dog d=new Dog("旺财"); + System.out.println(p.equals(d));*/ + + Objects.equal("a", "a"); // returns true + Objects.equal(null, "a"); // returns false + Objects.equal("a", null); // returns false + Objects.equal(null, null); // returns true + //使用MoreObjects firstNonNull + //Objects.firstNonNull(first, second); + + //对多个值生成hashcode + //Objects.hashCode(objects) + + //java.util.Objects.hash(values) + + + // Returns "ClassName{x=1}" + System.out.println(MoreObjects.toStringHelper(new ObjectDemo()) + .add("x", 1) + .toString()); + + // Returns "MyObject{x=1}" + System.out.println(MoreObjects.toStringHelper("MyObject") + .add("x", 1) + .toString()); + + //true{ + + @Override + public int compareTo(Person o) { + return ComparisonChain.start().compare(name,o.name).result(); + } + + + public String name; + public Person(String _name){ + name=_name; + } + @Override + public int hashCode() { + return this.name.hashCode(); + } + @Override + public boolean equals(Object obj) { + return this.toString().equals(obj.toString()); + } + public String toString(){ + return this.name; + } +} + +class Dog{ +public String name; + public Dog(String _name){ + name=_name; + } + @Override + public int hashCode() { + return this.name.hashCode(); + } + @Override + public boolean equals(Object obj) { + return this.toString().equals(obj.toString()); + } + public String toString(){ + return this.name; + } +} diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/base/ThrowablesDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/base/ThrowablesDemo.java new file mode 100644 index 000000000000..0d04653670dd --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/base/ThrowablesDemo.java @@ -0,0 +1,77 @@ +package com.putsoft.guava.base; + +import java.io.IOException; +import java.sql.SQLException; + +import com.google.common.base.Throwables; + +public class ThrowablesDemo { + + public static void main(String[] args) { + // TODO Auto-generated method stub + + try { + new ThrowablesDemo().test(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public void handle(MyException e){ + + System.out.println(e.getMessage()); + + } + + public void test() throws Exception{ + + try { + System.out.println("eee"); + throw new MyException("自身异常"); + } catch (MyException e) { + handle(e); + } catch (Throwable t) { + + //如果是此异常,即抛出 + Throwables.propagateIfInstanceOf(t, IOException.class); + Throwables.propagateIfInstanceOf(t, SQLException.class); + + //获取异常链 + //Throwables.getCausalChain(throwable); + + //获取最出的异常 + //Throwables.getRootCause(throwable); + + //返回堆栈的字符串格式 + // Throwables.getStackTraceAsString(); + + //抛出运行时异常 + throw Throwables.propagate(t); + } + + } + +} + +class MyException extends Exception{ + + private String message; + + public MyException(String _message){ + message=_message; + } + + @Override + public String getMessage() { + // TODO Auto-generated method stub + return message; + } + + + + + + +} From ebf2a8a3c7ce0d093bd5b8d5393446e5441c7ed1 Mon Sep 17 00:00:00 2001 From: bulejava Date: Sun, 10 May 2015 20:07:00 +0800 Subject: [PATCH 08/10] test --- .../putsoft/guava/collections/BiMapDemo.java | 20 ++++++++ .../collections/ClassToInstanceMapDemo.java | 19 +++++++ .../guava/collections/ImmutableSetDemo.java | 50 +++++++++++++++++++ .../guava/collections/MultimapDemo.java | 24 +++++++++ .../guava/collections/MultisetDemo.java | 43 ++++++++++++++++ .../guava/collections/RangeMapDemo.java | 18 +++++++ .../guava/collections/RangeSetDemo.java | 30 +++++++++++ .../putsoft/guava/collections/TableDemo.java | 20 ++++++++ 8 files changed, 224 insertions(+) create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/collections/BiMapDemo.java create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/collections/ClassToInstanceMapDemo.java create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/collections/ImmutableSetDemo.java create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/collections/MultimapDemo.java create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/collections/MultisetDemo.java create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/collections/RangeMapDemo.java create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/collections/RangeSetDemo.java create mode 100644 guava-tutorials/src/main/java/com/putsoft/guava/collections/TableDemo.java diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/collections/BiMapDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/collections/BiMapDemo.java new file mode 100644 index 000000000000..21a99028603d --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/collections/BiMapDemo.java @@ -0,0 +1,20 @@ +package com.putsoft.guava.collections; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + +public class BiMapDemo { + + public static void main(String[] args) { + + BiMap userId = HashBiMap.create(); + userId.put("aaa",1); + userId.put("bbb",2); + userId.put("ccc",3); + //根据value 返回ID + System.out.println(userId.inverse().get(1)); + System.out.println(userId.get("aaa")); + + } + +} diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/collections/ClassToInstanceMapDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/collections/ClassToInstanceMapDemo.java new file mode 100644 index 000000000000..26c8c841520f --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/collections/ClassToInstanceMapDemo.java @@ -0,0 +1,19 @@ +package com.putsoft.guava.collections; + +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.MutableClassToInstanceMap; + +public class ClassToInstanceMapDemo { + + public static void main(String[] args) { + + + ClassToInstanceMap numberDefaults = MutableClassToInstanceMap.create(); + numberDefaults.putInstance(Integer.class, Integer.valueOf(0)); + //numberDefaults.putInstance(Integer.class, Integer.valueOf(5)); + numberDefaults.putInstance(Double.class,Double.valueOf(2.0)); + System.out.println(numberDefaults.get(Integer.class)); + + } + +} diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/collections/ImmutableSetDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/collections/ImmutableSetDemo.java new file mode 100644 index 000000000000..a2405fc7cd89 --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/collections/ImmutableSetDemo.java @@ -0,0 +1,50 @@ +package com.putsoft.guava.collections; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; + +public class ImmutableSetDemo { + + + public static void main(String[] args) { + + //通过枚举创建不可变集和 + ImmutableSet foobar = ImmutableSet.of("foo", "bar", "baz"); + + + //通过拷贝方式创建 + //ImmutableSet.copyOf(elements) + //ImmutableList defensiveCopy = ImmutableList.copyOf(foobar); + //通过builder创建器 + //1、增加一个元素 + System.out.println(ImmutableSet.builder().add("sdfsdf").build()); + //2、通过链式调用,集成多个数据,生成一个新的对象 + System.out.println(ImmutableSet.builder().addAll(foobar).add("3434").add("23refd").build()); + + //返回List + //foobar.asList(); + + + + } + +} + + + +/*class Foo { + final ImmutableSet bars; + Foo(Set bars) { + this.bars = ImmutableSet.copyOf(bars); // defensive copy! + } +} + +class Bar{ + + +}*/ \ No newline at end of file diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/collections/MultimapDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/collections/MultimapDemo.java new file mode 100644 index 000000000000..19549acca8d6 --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/collections/MultimapDemo.java @@ -0,0 +1,24 @@ +package com.putsoft.guava.collections; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; + +public class MultimapDemo { + + public static void main(String[] args) { + + //创建对象 + Multimap map=HashMultimap.create(); + //相同key,put多个value + map.put("aa",1); + map.put("aa", 3); + map.put("bb",5); + System.out.println(map); + //返回key的value list集和 + System.out.println(map.get("bb")); + + + + } + +} diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/collections/MultisetDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/collections/MultisetDemo.java new file mode 100644 index 000000000000..9c2fc21f9d1e --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/collections/MultisetDemo.java @@ -0,0 +1,43 @@ +package com.putsoft.guava.collections; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import com.google.common.collect.HashMultiset; +import com.google.common.collect.Multiset; + +public class MultisetDemo { + + public static void main(String[] args) { + + //创建D对象 + Multiset set=HashMultiset.create(); + //增加元素 + set.add("aa"); + set.add("bb"); + set.add("aa"); + //获取元素个数 + System.out.println(set.count("aa")); + //增加一个集和 + set.addAll(set); + System.out.println(set); + //转换成jdk set + Set cset=set.elementSet(); + + System.out.println(cset); + + List test=new ArrayList(); + test.add("aa"); + //移除指定容器元素外的所有元素 + set.retainAll(test); + System.out.println(set); + + set.setCount("aa", 5); + + System.out.println(set); + + + } + +} diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/collections/RangeMapDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/collections/RangeMapDemo.java new file mode 100644 index 000000000000..a90c6a9ac985 --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/collections/RangeMapDemo.java @@ -0,0 +1,18 @@ +package com.putsoft.guava.collections; + +import com.google.common.collect.Range; +import com.google.common.collect.RangeMap; +import com.google.common.collect.TreeRangeMap; + +public class RangeMapDemo { + + public static void main(String[] args) { + // TODO Auto-generated method stub + RangeMap 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"} + } + +} diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/collections/RangeSetDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/collections/RangeSetDemo.java new file mode 100644 index 000000000000..1499e75bc546 --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/collections/RangeSetDemo.java @@ -0,0 +1,30 @@ +package com.putsoft.guava.collections; + +import java.util.Set; + +import com.google.common.collect.Range; +import com.google.common.collect.RangeSet; +import com.google.common.collect.TreeRangeSet; + +public class RangeSetDemo { + + public static void main(String[] args) { + + RangeSet rangeSet = TreeRangeSet.create(); + rangeSet.add(Range.closed(1, 10)); // {[1, 10]} + rangeSet.add(Range.closedOpen(11, 15)); // disconnected range: {[1, 10], [11, 15)} + rangeSet.add(Range.closedOpen(15, 20)); // connected range; {[1, 10], [11, 20)} + rangeSet.add(Range.openClosed(0, 0)); // empty range; {[1, 10], [11, 20)} + rangeSet.remove(Range.open(5, 10)); // splits [1, 10]; {[1, 5], [10, 10], [11, 20)} + + System.out.println(rangeSet); + + Set> set=rangeSet.asRanges(); + + Range[] range=set.toArray(new Range[set.size()]); + + System.out.println(range[0].); + + } + +} diff --git a/guava-tutorials/src/main/java/com/putsoft/guava/collections/TableDemo.java b/guava-tutorials/src/main/java/com/putsoft/guava/collections/TableDemo.java new file mode 100644 index 000000000000..62c5a31432bb --- /dev/null +++ b/guava-tutorials/src/main/java/com/putsoft/guava/collections/TableDemo.java @@ -0,0 +1,20 @@ +package com.putsoft.guava.collections; + +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Table; + +public class TableDemo { + + public static void main(String[] args) { + + Table weightedGraph = HashBasedTable.create(); + weightedGraph.put(1, "aaa", 4.0); + weightedGraph.put(1,"bbb", 20.0); + weightedGraph.put(2,"ccc", 5.0); + + System.out.println(weightedGraph.row(1)); // returns a Map mapping v2 to 4, v3 to 20 + System.out.println(weightedGraph.column("bbb")); // returns a Map mapping v1 to 20, v2 to 5 + + } + +} From eb28e6b8af3567670e4e02865bbdb4c99d5a6118 Mon Sep 17 00:00:00 2001 From: bulejava Date: Wed, 27 May 2015 00:52:29 +0800 Subject: [PATCH 09/10] zookeeper host update --- zkclient/pom.xml | 31 ++++++ .../java/putsoft/com/server/UserClient.java | 98 +++++++++++++++++++ .../java/putsoft/com/server/UserServer.java | 53 ++++++++++ 3 files changed, 182 insertions(+) create mode 100644 zkclient/pom.xml create mode 100644 zkclient/src/main/java/putsoft/com/server/UserClient.java create mode 100644 zkclient/src/main/java/putsoft/com/server/UserServer.java diff --git a/zkclient/pom.xml b/zkclient/pom.xml new file mode 100644 index 000000000000..50b00b1eb1cf --- /dev/null +++ b/zkclient/pom.xml @@ -0,0 +1,31 @@ + + 4.0.0 + + putsoft.com + zkclient + 0.0.1-SNAPSHOT + jar + + zkclient + http://maven.apache.org + + + UTF-8 + + + + + junit + junit + 3.8.1 + test + + + + com.github.adyliu + zkclient + 2.1.1 + + + diff --git a/zkclient/src/main/java/putsoft/com/server/UserClient.java b/zkclient/src/main/java/putsoft/com/server/UserClient.java new file mode 100644 index 000000000000..e31c09e67b65 --- /dev/null +++ b/zkclient/src/main/java/putsoft/com/server/UserClient.java @@ -0,0 +1,98 @@ +package putsoft.com.server; + + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.zookeeper.KeeperException; +import org.apache.zookeeper.WatchedEvent; +import org.apache.zookeeper.Watcher; +import org.apache.zookeeper.ZooKeeper; +import org.apache.zookeeper.data.Stat; + +public class UserClient { + + + public static String root="/group"; + + public static final String ZK_LIST="172.17.0.1:2181,172.17.0.2:2181,172.17.0.3:2181,172.17.0.4:2181,172.17.0.5:2181"; + + public static ZooKeeper zookeeper; + + public Watcher wacher=new NodeWatcher(); + + private static Stat stat=new Stat(); + + private static List hostList=new ArrayList(); + + + public UserClient() throws IOException, KeeperException, InterruptedException{ + + zookeeper=new ZooKeeper(UserClient.ZK_LIST, 5000,new Watcher(){ + public void process(WatchedEvent event) { + + } + }); + + zookeeper.getChildren(root,wacher); + } + + + public static void updateHostConfig(WatchedEvent event) throws Exception{ + + hostList.clear(); + + if(event.getType()==Watcher.Event.EventType.NodeChildrenChanged + &&event.getPath().equals(root)){ + + List nodes=zookeeper.getChildren(root,true); + + String value=null; + + for(String str:nodes){ + + byte[] data = zookeeper.getData(root + "/" + str, false, stat); + + value=new String(data,"utf-8"); + + hostList.add(value); + } + print(hostList); + } + } + + + public static void print(List list){ + System.out.print("["); + for(String str:list){ + System.out.print(str+","); + } + System.out.println("]"); + } + + + public static void main(String[] args) throws Exception { + new UserClient(); + Thread.sleep(Long.MAX_VALUE); + } + + + + class NodeWatcher implements Watcher{ + + public void process(WatchedEvent event) { + try { + UserClient.updateHostConfig(event); + zookeeper.getChildren(root,wacher); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + + +} + + diff --git a/zkclient/src/main/java/putsoft/com/server/UserServer.java b/zkclient/src/main/java/putsoft/com/server/UserServer.java new file mode 100644 index 000000000000..eae3eccbaab3 --- /dev/null +++ b/zkclient/src/main/java/putsoft/com/server/UserServer.java @@ -0,0 +1,53 @@ +package putsoft.com.server; + +import java.util.Calendar; + +import java.util.Random; + +import org.apache.zookeeper.CreateMode; +import org.apache.zookeeper.WatchedEvent; +import org.apache.zookeeper.Watcher; +import org.apache.zookeeper.ZooDefs.Ids; +import org.apache.zookeeper.ZooKeeper; + + +public class UserServer { + + public static String root="/group"; + + public static final String ZK_LIST="172.17.0.1:2181,172.17.0.2:2181,172.17.0.3:2181,172.17.0.4:2181,172.17.0.5:2181"; + + private ZooKeeper zkeeper; + + public UserServer(){ + + String address=UserServer.gethost(); + + try{ + zkeeper=new ZooKeeper(UserServer.ZK_LIST, 2000, new Watcher() { + public void process(WatchedEvent event) { + + } + }); + zkeeper.create(root+"/"+address,address.getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); + + }catch(Exception e){ + e.printStackTrace(); + } + } + + public static String gethost(){ + + Calendar calendar=Calendar.getInstance(); + + return "10.172."+calendar.get(Calendar.SECOND)+"."+new Random().nextInt(255); + + } + + public static void main(String[] args) throws InterruptedException { + new UserServer(); + Thread.sleep(Long.MAX_VALUE); + + } + +} From 2e901559ccdfd20a159b77769e4b51c3cc48e67d Mon Sep 17 00:00:00 2001 From: bulejava Date: Thu, 28 May 2015 02:08:02 +0800 Subject: [PATCH 10/10] zookeeper lock --- .../java/putsoft/com/lock/DistributeLock.java | 144 ++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 zkclient/src/main/java/putsoft/com/lock/DistributeLock.java diff --git a/zkclient/src/main/java/putsoft/com/lock/DistributeLock.java b/zkclient/src/main/java/putsoft/com/lock/DistributeLock.java new file mode 100644 index 000000000000..95c5107a4ff5 --- /dev/null +++ b/zkclient/src/main/java/putsoft/com/lock/DistributeLock.java @@ -0,0 +1,144 @@ +package putsoft.com.lock; + +import java.util.Collections; +import java.util.List; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +import org.apache.zookeeper.CreateMode; +import org.apache.zookeeper.WatchedEvent; +import org.apache.zookeeper.Watcher; +import org.apache.zookeeper.ZooDefs.Ids; +import org.apache.zookeeper.ZooKeeper; +import org.apache.zookeeper.data.Stat; + +import putsoft.com.server.UserClient; + +public class DistributeLock implements Runnable{ + + public static String root="/group"; + + public static final String ZK_LIST="172.17.0.1:2181,172.17.0.2:2181,172.17.0.3:2181,172.17.0.4:2181,172.17.0.5:2181"; + + public static ZooKeeper zookeeper; + + private String currentZnode; + + private String clientName; + + + public static boolean flag=true; + + private String path; + + + public static Lock lock=new ReentrantLock(); + + public DistributeLock(String name) throws Exception{ + + this.clientName=name; + + zookeeper=new ZooKeeper(UserClient.ZK_LIST, 5000,new Watcher(){ + public void process(WatchedEvent event) { + + if(Event.KeeperState.SyncConnected==event.getState()){ + + if(event.getType()==Watcher.Event.EventType.None){ + + System.out.println(" zookeeper server is connected!"); + + }else if(event.getType()==Watcher.Event.EventType.NodeChildrenChanged){ + System.out.println(" node changed!"); + flag=false; + } + } + } + }); + } + + public String getClientName(){ + return this.clientName; + } + + public void getLock() throws Exception{ + + if(path==null){ + currentZnode=getClientName(); + path=zookeeper.create(root+"/"+currentZnode, currentZnode.getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); + clientName=path; + } + + List listnodes=zookeeper.getChildren(root, true); + + //print(listnodes); + + Collections.sort(listnodes); + + if(path.equals(root+"/"+listnodes.get(0))){ + System.out.println(this.getClientName()+" get lock success! do something for 3s ..."); + Thread.sleep(3000); + releaseLock(); + } + else{ + waitLock(listnodes.get(0)); + } + + } + + public void waitLock(String lower) throws Exception { + Stat stat = zookeeper.exists(root + "/" + lower,true); + if(stat != null){ + flag=true; + System.out.println(this.getClientName()+" thread wait for lock"); + while(flag){ + Thread.sleep(100); + } + System.out.println(this.getClientName()+" notify"); + } + this.getLock(); + } + + public void releaseLock() throws Exception{ + zookeeper.delete(path, -1); + path=null; + System.out.println(getClientName()+" end "); + } + + +/* public void print(List list){ + System.out.println(); + System.out.print(this.getClientName()+": "); + + for(String str:list){ + System.out.print(str+","); + } + System.out.println(); + }*/ + + public static void main(String[] args) throws Exception{ + + String c1="client-"; + String c2="client-"; + String c3="client-"; + + Thread t1=new Thread(new DistributeLock(c1)); + Thread t2=new Thread(new DistributeLock(c2)); + Thread t3=new Thread(new DistributeLock(c3)); + + t3.start(); + t1.start(); + t2.start(); + + + } + + public void run() { + try { + this.getLock(); + } catch (Exception e) { + e.printStackTrace(); + } + + } + +}