版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40646143/article/details/83817379
List只读设置
package com.hp.collections;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* 对于list集合的只读设置
*/
public class Demo1 {
public static void main (String[] args) {
List<String> list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
//对原有list进行包装 相当于原有list的一个视图 快照
List<String> unmodifiableList = Collections.unmodifiableList(list);
//当我们强行添加 会出现错误 java.lang.UnsupportedOperationException
//unmodifiableList.add("d");
//可以通过 改变 list数据来添加 这样不安全
list.add("d");
System.out.println(unmodifiableList.size());
//官网还提供另外一个安全的方法 静态初始化 安全相当简单
ImmutableList<String> immutableList = ImmutableList.of("a", "b", "c");
//添加方法已经过时
//immutableList.add("d");
System.out.println(immutableList.size());
}
}
Collections2.filter相当于过滤器 筛选我们需要的数据
package com.hp.collections;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.Collection;
/**需求 : 找出list集合里面回文的数据(正序和倒叙一样的数据)
* Predicate
*/
public class Demo2 {
public static void main (String[] args) {
ArrayList<String> list = Lists.newArrayList("moom", "son", "dad", "hp");
//匿名内部类对象 : 匿名内部类 同时创建对象
Collection<String> collection = Collections2.filter(list, new Predicate<String>() {
@Override
public boolean apply(String s) {
//处理逻辑方法
return new StringBuffer(s).reverse().toString().equals(s);
}
});
for (String s:collection) {
System.out.println(s);
}
}
}
Collections2.transform()进行类型的转换
package com.hp.collections;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.common.collect.Sets;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Set;
/**set 无序 不可重复
* 把集合Long类型转化为时间
*/
public class Demo3 {
public static void main (String[] args) {
Set<Long> hashSet = Sets.newHashSet();
hashSet.add(555555L);
hashSet.add(222222222L);
hashSet.add(99999999999000000L);
Collection<String> transform = Collections2.transform(hashSet, new Function<Long, String>() {
@Override
public String apply(Long aLong) {
return new SimpleDateFormat("yyyy-MM-dd").format(aLong);
}
});
for (String s:transform) {
System.out.println(s);
}
}
}
Functions.compose()函数组合式编程
package com.hp.collections;
import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import java.util.Collection;
import java.util.List;
/**
* 组合式函数编程
*
* 对list集合的数据进行判断如果大于5则截取0-5个数据 全部转化为大写输出
*/
public class Demo4 {
public static void main (String[] args) {
List<String> list= Lists.newArrayList("goods","hello","ILooveYou");
Function<String, String> function = new Function<String, String>() {
@Override
public String apply(String s) {
//如果s的长度大于五则截取0-5个字段 如果不大于5则 继续下一个
return s.length()>5?s.substring(0,5):s;
}
};
Function<String, String> function1 = new Function<String, String>() {
@Override
public String apply(String s) {
//转化为大写
return s.toUpperCase();
}
};
//相当于数学公式 String str=function1(function(s))
Function<String, String> functions=Functions.compose(function1, function);
Collection<String> result = Collections2.transform(list, functions);
for (String s:result) {
System.out.println(s);
}
}
}
注意:Function导入的包是
com.google.common.base.Function;
不是
import java.util.function.Function;
这个错误,让我找了好久
求俩个集合的交集,差集,并集用到
Sets.intersection() //交集
Sets.difference() //差集
Sets.union()//并集 使用如下
package com.hp.collections;
import com.google.common.collect.Sets;
import java.util.Set;
/**
* 集合的 交集 差集 并集
*/
public class Demo5 {
public static void main (String[] args) {
Set<Integer> set1= Sets.newHashSet(1,2,3,4,5,6);
Set<Integer> set2= Sets.newHashSet(3,4,5,6,7,8);
//交集
Sets.SetView<Integer> setView = Sets.intersection(set1, set2);
System.out.println("交集为");
for (Integer it:setView) {
System.out.println(it);
}
//差集
Sets.SetView<Integer> difference = Sets.difference(set1, set2);
System.out.println("差集为");
for (Integer it:difference) {
System.out.println(it);
}
//交集
Sets.SetView<Integer> union= Sets.union(set1, set2);
System.out.println("交集为");
for (Integer it:union) {
System.out.println(it);
}
}
}