import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.IntStream;
/* 2017-02-17 12:41:48
* Set 无序、不可重复
* List 有序、重复
* Map 映射关系集合
* Queue 队列集合实现
*
*
* --Map
* ------EnumMap
* ------identityHashMap
* ------HashMap 线程不安全 key、vlaue 允许为null
* -LinkHashMap
* ------HashTable 线程安全 key、vlaue 不能为null
* ------SortedMap
* -TreeMap
* ------WeakHashMap
* --Collection
* ---Set
* ---EnumSet
* ---SortedSet
* -TreeSet
* ---HashSet
* -LinkedHashSet
* ---Queue
* --Deque
* --PriorityQueue
* ---List
* ---Vector
* -Stack
* ---ArrayList
* ---linkedList 也继承了Deque
*/
public class Collectionj {
public static void main(String[] args) {
// c1();
// bianlij();
// predicatej();
/* 2017-02-17 14:39:53
*
*/
//stream 操作集合
//stream 是一个通用的流接口
/*
* 独立使用stream步骤
*
* 使用stream 或 xxxstream 的builder方法 创建该stream 对应的builder
* 重复调用add 方法向流中添加多个元素
* 调用builder的 build 方法 获取对应的stream
* 调用stream 的聚集方法
*
* */
IntStream is = IntStream.builder()
.add(1111)
.add(23)
.add(31)
.add(46)
.add(76)
.build();
//使用聚焦方法 每次只能执行一行
// System.out.println(is.max().getAsInt() + " " + is.count());
// System.out.println(is.count());
IntStream is2 = is.map(ele -> ele *2+1); //将原来得元素的2倍 + 1
is2.forEach(System.out::println); //是用方法引用的方式来遍历 集合元素
/*
*
* stream 提供大量的方法进行聚焦操作 这些方法 可以是中间 的 intermediate 也可以是 terminal
*
* 中间方法 中间操作允许流报纸打开状态,并允许直接刁颖后续方法 , map 就是一个中间方法 返回值是另外一个流
*
* 末端方法
* 是对流的最终操作, 当对流执行末端方法后,该流将会被消耗且不可再用 , sum count average
*
* 有状态的方法
* 这种方法会给流增加一些新的属性, 元素的唯一性、 元素的最大数量 这些方法 往往 有大的开销
*
* 短路方法
* 可以尽早的结束对流的操作 不必键槽所有的元素
* */
}
/* 2017-02-17 14:32:40
*
//Predicate 操作
*/
private static void predicatej() {
Collection collection = new HashSet<String>();
collection.add("11111");
collection.add("b222111222222222");
collection.add("c12222211");
collection.add("d111");
collection.add("e");
// collection.removeIf(c ->((String)(c)).length() <5) ;
// 用lambda 将长度小于5 的元素删除
collection.forEach(c -> System.out.println(c));
//
System.out.println();
System.out.println(testpre(collection, ele -> ((String)ele).contains("1")));
//统计字符中有 1 的个数
}
static int testpre( Collection collection , Predicate predicate ){
int i = 0 ;
for (Object obj : collection) {
if (predicate.test(obj)) {
i++ ;
}
}
return i ;
}
/* 2017-02-17 13:49:25
*
*/
private static void bianlij() {
/*
* Iterable 接口新增了一个 forEach(Consumer action) 默认方法
* 该方法所需参数的类型是一个函数式接口
* 也是Collection 的父接口
* 可以使用lambda表达式来遍历集合元素
* */
Collection collection = new HashSet<String>();
collection.add("a");
collection.add("b");
collection.add("c");
collection.add("d");
collection.add("e");
collection.forEach(c -> System.out.println(c));
// lambda 表达式的目标类型是 Comsumer
// foreach 方法会自动将集合的元素逐个传给 Lambda 表达式
// iterator 遍历
//iterator 仅仅用来遍历 没有保存对象的能力
//遍历过程中不能对元素进行修改
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
// iterator.hasNext() 如果没有遍历完就返回元素
// iterator.next() 返回集合的下一个元素
// iterator.remove(); 删除集合里 上一次next 方法返回的元素
// iterator.forEachRemaining(action); 可以是用lambda 遍历集合元素
System.out.print(iterator.next());
}
System.out.println();
iterator.forEachRemaining(i -> System.out.print(i));
System.out.println();
//foreach 遍历过程中的值也不能被改变
for (Object object : collection) {
System.out.print(object);
}
}
/* 2017-02-17 13:10:45
*
*/
private static void c1() {
/*
*Collection 接口是List、Set、Queue 的父接口
*
*/
Collection collection = new ArrayList();
//增
collection.add("asdf"); // 添加元素
collection.add("123");
// collection.addAll(collection)
//删
// collection.clear();
// collection.remove(o)
// collection.removeAll(c)
//判断
// collection.size()
// collection.isEmpty()
// collection.contains(o)
//输出
// collection.toArray()
// collection.retainAll(c)
//返回迭代器
// collection.iterator()
}
}