Java容器-引入Guava类库
目录
1、只读设置
2、函数式编程+组合式编程
3、约束条件
4、集合操作(并集、差集、交集)
代码实现
1、只读设置
public static void main(String [] args){
//只读设置
List ls=new ArrayList();
ls.add("a");
ls.add("b");
ls.add("c");
//不使用guava的类库
List <String > readList= Collections.unmodifiableList(ls);
//readList.add("d"); 报错
//使用guava的类库
List<String> imutableList= ImmutableList.of("a","b","c");
//imutableList.add("a"); 运行报错
}
2、函数式编程
(1)函数一:找出集合众的回文字符串,回文又称 mirror word ,backword,是指字符串从前面或者后面读都是一样的,比如moom
//结果:moom 因为moon逆序以后还是moom
public static void main(String[] args) {
List<String> list = Lists.newArrayList("dog", "cat", "pig", "moom");Collection</span><String> pList=Collections2.filter(list, <span style="color: #0000ff;">new</span> Predicate<String><span style="color: #000000;">() {
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">boolean</span><span style="color: #000000;"> apply(String s) {
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder(s).reverse().toString().equals(s);
}
}); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 匿名内部类,同时创建对象,Collections2.filter类似过滤器</span>
<span style="color: #0000ff;">for</span><span style="color: #000000;">(Object o:pList){
System.out.println(o);
}
}</span></span></pre>
(2)函数二:日期转换
//结果:1970-01-01 1970-01-24 1970-01-02
public static void main(String [] args){
Set<Long> timeSet= Sets.newHashSet();
timeSet.add(1000L);
timeSet.add(2000L*1000000);
timeSet.add(3000L*20000);
Collection</span><String> transList= Collections2.transform(timeSet, <span style="color: #0000ff;">new</span> Function<Long, String><span style="color: #000000;">() {
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String apply(Long input) {
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span> SimpleDateFormat("yyyy-MM-dd"<span style="color: #000000;">).format(input);
}
});
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(String s:transList){
System.out.println(s);
}
}</span></span></pre>
(3)函数三:组合式编程
public static void main(String [] args){
List<String> list = Lists.newArrayList("happy", "sad", "wahaha");
//方法一
Function<String,String>f1=new Function<String, String>() {
public String apply(String s) {
return s.length()>5&&s.length()<20?s:"error";
}
};
//方法二:字母全部大写
Function<String, String> f2 = new Function<String, String>() {
public String apply(String input) {
return input.toUpperCase();
}
};
//组合方法
Function<String, String> f = Functions.compose(f1, f2);
Collection resultCol=Collections2.transform(list,f);
for(Object s:resultCol){
System.out.println(s);
}
}
3、约束条件
public static void main(String[] args) {
Set<String> sets = Sets.newHashSet();
// 创建约束
Constraint<String> constraint = new Constraint<String>() {
@Override
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String checkElement(String element) {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 非空验证</span>
Preconditions.checkNotNull(element);
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 长度限制 5-20,否则报错</span>
Preconditions.checkArgument(
element.length() >= 5 && element.length() <= 20,
element);
return element;
}
};
Set</span><String> cs =<span style="color: #000000;"> Constraints.constrainedSet(sets, constraint);
</span><span style="color: #008000;">//</span><span style="color: #008000;"> cs.add(null); 报错java.lang.NullPointerException
</span><span style="color: #008000;">//</span><span style="color: #008000;">cs.add("qaz"); 报错java.lang.IllegalArgumentException: qaz</span>
}</span></pre>
4、交集、并集、差集
public static void main(String [] args){
Set<Integer> sets=Sets.newHashSet(1,2,3,4,5,6);
Set<Integer> set2=Sets.newHashSet(3,4,5,6,7,8,9);
Sets.SetView</span><Integer> intersection =<span style="color: #000000;">Sets.intersection(sets, set2);
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(Integer in:intersection){
System.out.print(in</span>+" "<span style="color: #000000;">);
}
System.out.println(</span>""<span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;">差集</span>
Sets.SetView<Integer> intersection2=<span style="color: #000000;">Sets.difference(sets,set2);
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(Integer in:intersection2){
System.out.print(in</span>+" "<span style="color: #000000;">);
}
System.out.println(</span>""<span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;">并集</span>
Sets.SetView<Integer> intersection3=<span style="color: #000000;">Sets.union(sets,set2);
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(Integer in:intersection3){
System.out.print(in</span>+" "<span style="color: #000000;">);
}
}</span></span></pre>

Java容器-引入Guava类库的更多相关文章
- Java——容器类库框架浅析
前言 通常,我们总是在程序运行过程中才获得一些条件去创建对象,这些动态创建的对象就需要使用一些方式去保存.我们可以使用数组去存储,但是需要注意数组的尺寸一旦定义便不可修改,而我们并不知道程序在运行过程 ...
- 图解JAVA容器核心类库
JAVA容器详解 类继承结构图 HashMap 1. 对象的HashCode是用来在散列存储结构中确定对象的存储地址的. 2. 如果两个对象的HashCode相同,即在数组中的地址相同.而数组的元 ...
- java容器(java编程思想第四版-读书笔记)
容器类库图 List(interface) 次序是List最重要的特点:它保证维护元素特定的顺序.List为Collection添加了许多方法,使得能够向List中间插入与移除元素.(这只推荐L ...
- java容器---集合总结
思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...
- [Java 缓存] Java Cache之 Guava Cache的简单应用.
前言 今天第一次使用MarkDown的形式发博客. 准备记录一下自己对Guava Cache的认识及项目中的实际使用经验. 一: 什么是Guava Guava工程包含了若干被Google的 Java项 ...
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
- 【Java心得总结六】Java容器中——Collection
在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...
- 【Java心得总结五】Java容器上——容器初探
在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...
- Java 容器(list, set, map)
java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...
随机推荐
- STL中heap相关函数
heap并不是属于STL中的containers,而是在<algorithm>下提供了相关的函数 make_heap,sort_heap,pop_heap,push_heap 函数的说明: ...
- socket 开发 - 那些年用过的基础 API
---------------------------------------------------------------------------------------------------- ...
- PHP用imageTtfText函数在图片上写入汉字
https://blog.csdn.net/smstong/article/details/43955705 PHP绘图,imageString()这个函数并不支持汉字的绘制.这往往会给入门者当头一棒 ...
- Python股票信息抓取~
本来想把股票的涨跌抓取出来,用汇通网的股票为例,就找了国际外汇为例. 页面里有xhr请求,并且每个xhr的url请求的 http://api.q.fx678.com/history.php?symbo ...
- 一个配置文件收集多个日志-if根据type类型判断
1.同时收集/var/log/messages日志和secure日志 #vim /etc/logstash/conf.d/system.conf input { file { path => & ...
- Node.js的Buffer那些你可能不知道的用法
在大多数介绍Buffer的文章中,主要是围绕数据拼接和内存分配这两方面的.比如我们使用fs模块来读取文件内容的时候,返回的就是一个Buffer: fs.readFile('filename', fun ...
- SQL必知必会 -------- 聚集函数、分组排序
聚集函数 1.AVG()函数 输入:SELECT AVG(prod_price) AS avg_price FROM Products 输出: 警告:只用于单个列AVG()只能用来确定特定数值列的平均 ...
- HDU 6185 Covering
矩阵快速幂. 一开始的思路是$dfs$出一个矩阵,$k[i][j]$表示这一行是状态$i$,将这一行填满,下一行是$j$状态的方案数.然后就可以矩阵快速幂了,但是矩阵大小是$16*16$的,超时了.. ...
- 【记录】mysql 无法启动 : NET HELPMSG 3523
mysql 无法启动 : NET HELPMSG 3523后来注意到mysql 配置文件的格式是 utf-8 还是有bom的utf-8 bom格式前面会多出一些看不见的字符,所以mysql读取配置文件 ...
- Nginx配置站点https
step 1: 检查nginx的编译参数 使用nginx -V可以查看,如果编译参数中包含http_ssl_module,可以继续下一步操作,如果没有,则需要从新编译. step 2: 申请证书 目前 ...