目录

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>&lt;String&gt; pList=Collections2.filter(list, <span style="color: #0000ff;">new</span> Predicate&lt;String&gt;<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>&lt;String&gt; transList= Collections2.transform(timeSet, <span style="color: #0000ff;">new</span> Function&lt;Long, String&gt;<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>&lt;String&gt; 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>&lt;Integer&gt; 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&lt;Integer&gt; 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&lt;Integer&gt; 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类库的更多相关文章

  1. Java——容器类库框架浅析

    前言 通常,我们总是在程序运行过程中才获得一些条件去创建对象,这些动态创建的对象就需要使用一些方式去保存.我们可以使用数组去存储,但是需要注意数组的尺寸一旦定义便不可修改,而我们并不知道程序在运行过程 ...

  2. 图解JAVA容器核心类库

    JAVA容器详解 类继承结构图 HashMap 1. 对象的HashCode是用来在散列存储结构中确定对象的存储地址的.   2. 如果两个对象的HashCode相同,即在数组中的地址相同.而数组的元 ...

  3. java容器(java编程思想第四版-读书笔记)

    容器类库图    List(interface) 次序是List最重要的特点:它保证维护元素特定的顺序.List为Collection添加了许多方法,使得能够向List中间插入与移除元素.(这只推荐L ...

  4. java容器---集合总结

    思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...

  5. [Java 缓存] Java Cache之 Guava Cache的简单应用.

    前言 今天第一次使用MarkDown的形式发博客. 准备记录一下自己对Guava Cache的认识及项目中的实际使用经验. 一: 什么是Guava Guava工程包含了若干被Google的 Java项 ...

  6. 【Java心得总结七】Java容器下——Map

    我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...

  7. 【Java心得总结六】Java容器中——Collection

    在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...

  8. 【Java心得总结五】Java容器上——容器初探

    在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...

  9. Java 容器(list, set, map)

    java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...

随机推荐

  1. Python 中的闭包与装饰器

    闭包(closure)是函数式编程的重要的语法结构.闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性. 如果在一个内嵌函数里,对在外部函数内(但不是在全局作用域)的变量进行引用,那么内嵌函数 ...

  2. 日志生成控制文件syslog.conf

    1: syslog.conf的介绍 对于不同类型的Unix,标准UnixLog系统的设置,实际上除了一些关键词的不同,系统的syslog.conf格式是相同的.syslog采用可配置的.统一的系统登记 ...

  3. css绘制图标

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  4. Delphi根据字符串实例化对象

    我们可以通过ClassRegistry单元的TClassRegistry类很轻松的根据字符串创建出对象. 下面是该类几个主要函数的说明: // 获取TClassRegistry自身的单例引用class ...

  5. Educational Codeforces Round 25 D - Suitable Replacement(贪心)

    题目大意:给你字符串s,和t,字符串s中的'?'可以用字符串t中的字符代替,要求使得最后得到的字符串s(可以将s中的字符位置两两交换,任意位置任意次数)中含有的子串t最多. 解题思路: 因为知道s中的 ...

  6. hdu 3573(数学+贪心)

    Buy Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. **CodeIgniter通过hook的方式实现简单的权限控制

    根据自己的实际情况,需要两个文件,一个是权限控制类,Acl,另外一个是权限配置的文件acl.php放在了config这个目录下. Acl这个类放在了application/hook/acl.php.通 ...

  8. opencv3.10加入OPENCV_contrib模块

    在VS2015+opencv3.1进行算法研究时,遇到了一些模块在官网下载的里面是没有的,需要自己进行编译,参考以下链接 http://blog.csdn.net/liu798675179/artic ...

  9. c++ primer 9 顺序容器

    定义: #include <vector> #include <list> #include <deque> vector<int> svec; lis ...

  10. LR字符串处理

    Action() { strchr和strrchr: //strchr:查找指定字符在一个字符串中第一次出现的位置,然后返回指向该位置的指针. //char *strchr(const char *s ...