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 ...
随机推荐
- 64_p10
python3-matplotlib-qt4-2.0.0-2.fc26.2.x86_64.rpm 05-Apr-2017 09:54 29438 python3-matplotlib-qt5-2.0. ...
- python3.x的HTMLTestRunner.py文件
"""A TestRunner for use with the Python unit testing framework. Itgenerates a HTML re ...
- AWS 使用总结
A.升配置的流程: 1.新开一台配置较高的机器; 2.将新机器和老机器的磁盘都取消关联,注意需要记录下老机器的磁盘分区设备名,如:/dev/sda1: 3.将老机器的磁盘挂载到新机器上,磁盘分区设备名 ...
- Codeforces 776C - Molly's Chemicals(思维+前缀和)
题目大意:给出n个数(a1.....an),和一个数k,问有多少个区间的和等于k的幂 (1 ≤ n ≤ 10^5, 1 ≤ |k| ≤ 10, - 10^9 ≤ ai ≤ 10^9) 解题思路:首先, ...
- 【重点】Jmeter----- 将 JDBC Request 查询结果作为下一个接口参数方法(二)
一.说明 jmeter与数据库mysql已连接成功 二.需求 1.前置条件: 1.已user数据库的前8位手机号码作为行动计划的名称 2.行动计划的日期是2018-10-17 2.操作步骤: 1)获取 ...
- 【原创】Scrapyd 的 .net 客户端
最近项目需要部署Scrapy爬虫,采用最简单的Scrapyd服务进行部署,基于.net core 进行了客户端的封装. 1)Scrapyd API文档:http://scrapyd.readthedo ...
- TestDirector其他
一.查看连接TD的用户 1.用单击界面上的“Connections”按钮,进入如下图: 二.Licenses管理 1.单击“Licenses”按钮,显示如下图: 2.单击“Modify License ...
- 最新JAVA编程题全集(50题及答案)
[程序1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 pu ...
- MySQL几个特别语法示例
简单介绍MySQL中几种特殊语法的用法: 1.创建示例用表和数据: 创建employees表[注:与SQL Server示例数据库Northwind中的表employees相同的表结构]: CREAT ...
- mysql打印输出转csv格式
1. mysql打印输出放在input.csv中 2. 执行该文件 <?php $str = file_get_contents("./input.csv"); $str = ...