135_容器_guava之_只讀_函數語言程式設計(過濾、轉換、組合 )_約束_集合
阿新 • • 發佈:2018-11-09
只讀設定
- Test01_ReadOnly.java
package guava.collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.google.common.collect.ImmutableList;
/**
* 只讀設定
* 1.原始(重新包裝):將需要設定為只讀的容器用Collections.unmodifiable_xxx()包裝成一個新的容器;
* 2.現在(直接建立):直接用Immutable_xxx.of(元素...)建立一個新的容器
*/
public class Test01_ReadOnly {
public static void main(String[] args) {
List<String> list =new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
//對原有的list進行包裝,相等於原有List的一個檢視,快照,不夠安全
List<String> readList =Collections.unmodifiableList(list);
readList.add("d" );//java.lang.UnsupportedOperationException
list.add("d"); //改變原有List;檢視也一起改變
//對比 檢視 初始化List guava對只讀設定 安全可靠,並且相對簡單
List<String> immutableList =ImmutableList.of("a", "b", "c");
immutableList.add("d");//java.lang.UnsupportedOperationException
}
}
函數語言程式設計(過濾|轉換|組合式程式設計)
- Test02_Function.java
package guava.collection;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
/**
* 函數語言程式設計 :解耦
* 1.Predicate
Predicate<T> pre=new Predicate<T>() {
@Override
public boolean apply(T input) {
return false;
}
};
* 2.Function
* Function<F, T> fun=new Function<F, T>() {
@Override
public T apply(F input) {
return null;
}
};
*
* 工具:
* Collections2.filter(容器,Predicate) 過濾器
* Collections2.transfer(容器,Function) 轉換
* Function newf=Functions.compose(f1,f2...)組合式函式程式設計
*/
public class Test02_Function {
public static void main(String[] args) {
test1();//過濾器
test2();//轉換
test3();//組合式函式程式設計
}
/**過濾器*/
public static void test1(){
//建立List;靜態初始化
List<String> list =Lists.newArrayList("moom","son","dad","bjsxt","refer");
//找出迴文 palindrome; backwords; mirror words
//匿名內部類物件: 匿名內部類,同時建立類物件
Collection<String> palindromeList =Collections2.filter(list, new Predicate<String>(){
@Override
public boolean apply(String input) {
//業務邏輯
return new StringBuilder(input).reverse().toString().equals(input);
}
});
for(String temp:palindromeList){
System.out.println(temp);
}
}
/**轉換*/
public static void test2(){
//型別轉換
Set<Long> timeSet =Sets.newHashSet();
timeSet.add(10000000L);
timeSet.add(99999999999999999L);
timeSet.add(2000000000L);
Collection<String> timeStrCol =Collections2.transform(timeSet, new Function<Long,String>(){
@Override
public String apply(Long input) {
return new SimpleDateFormat("yyyy-MM-dd").format(input);
}
});
for(String temp:timeStrCol){
System.out.println(temp);
}
}
/**
* 組合式函式程式設計
*/
public static void test3(){
//確保容器中的字串長度不超過5,超過進行擷取,後全部大寫
List<String> list =Lists.newArrayList("bjsxt","good","happiness");
//確保容器中的字串長度不超過5,超過進行擷取
Function<String,String> f1 =new Function<String,String>(){
@Override
public String apply(String input) {
return input.length()>5?input.substring(0,5):input;
}
};
//轉成大寫
Function<String,String> f2 =new Function<String,String>(){
@Override
public String apply(String input) {
return input.toUpperCase();
}
};
//String =f2(f1(String))
Function<String,String> f =Functions.compose(f1, f2);
Collection<String> resultCol =Collections2.transform(list, f);
for(String temp:resultCol){
System.out.println(temp);
}
}
}
加入約束條件
- Test03_Constraint.java
package guava.collection;
import java.util.Set;
import com.google.common.collect.Constraint;
import com.google.common.collect.Constraints;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
/**
* 加入約束條件:Constraint,Preconditions,Constraints
* Constraint<E> constraint=new Constraint<E>() {
@Override
public E checkElement(E element) {
Preconditions.checkNotNull(element);//非空驗證
Preconditions.checkArgument(element.length()>=5 && element.length()<=20);//長度驗證
return element;
}
};
* Constraints.constrained_xxx(需要約束的容器, constraint);//返回一個容器
*/
public class Test03_Constraint {
public static void main(String[] args) {
Set<String> sets =Sets.newHashSet();
//建立約束
Constraint<String> constraint =new Constraint<String>(){
@Override
public String checkElement(String element) {
//非空驗證
Preconditions.checkNotNull(element);
//長度驗證 5-20為字串
Preconditions.checkArgument(element.length()>=5 && element.length()<=20);
return element;
}
};
Set<String> cs =Constraints.constrainedSet(sets, constraint);
// cs.add(null); //java.lang.NullPointerException
// cs.add("good"); //java.lang.IllegalArgumentException
cs.add("bjsxt");
for(String str:cs){
System.out.println(str);
}
}
}
集合的操作
- Test04_GatherOperation.java
package guava.collection;
import java.util.Set;
import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;
/**
* 集合的操作:
* 1. 交集
* Sets.intersection()
* 2. 差集
* Sets.difference()
* 3. 並集
* Sets.union();
*/
public class Test04_GatherOperation {
public static void main(String[] args) {
Set<Integer> sets =Sets.newHashSet(1,2,3,4,5,6);
Set<Integer> sets2 =Sets.newHashSet(3,4,5,6,7,8,9);
//交集
System.out.println("交集為:");
SetView<Integer> intersection =Sets.intersection(sets, sets2);
for(Integer temp:intersection){
System.out.println(temp);
}
//差集
System.out.println("差集為:");
SetView<Integer> diff =Sets.difference(sets, sets2);
for(Integer temp:diff){
System.out.println(temp);
}
//並集
System.out.println("並集為:");
SetView<Integer> union =Sets.union(sets, sets2);
for(Integer temp:union){
System.out.println(temp);
}
}
}