package commons之迭代器扩展;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.collections4.IterableMap;
import org.apache.commons.collections4.MapIterator;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.iterators.ArrayListIterator;
import org.apache.commons.collections4.iterators.FilterIterator;
import org.apache.commons.collections4.iterators.LoopingIterator;
import org.apache.commons.collections4.iterators.UniqueFilterIterator;
import org.apache.commons.collections4.map.HashedMap;
/**
-
迭代器扩展
-
1.MapIterator 替换map.keySet.iterator访问
-
有2个接口:IterableMap及比较好用的HashedMap
-
- 去重迭代器:UniqueFilterIterator
-
- 自定义迭代器:FilterIterator ;(自定义过滤+断言Predicate)
-
4.循环迭代器:LoopingIterator
-
5.数组迭代器:ArrayListIterator
*/
public class Demo01 {public static void main(String[] args) {
mapIt();
uniqueIt();
filterIt();
loopIt();
arrayIt();
}
/**- map迭代器
*/
public static void mapIt(){
System.out.println("=====map迭代器=");
IterableMap<String, String> map = new HashedMap<>();
map.put(“1”, “张三”);
map.put(“2”, “李四”);
map.put(“3”, “王五”);
//现在使用MapIterator
MapIterator<String, String> it = map.mapIterator();
while(it.hasNext()){
//注意:一定要用it.nest()移动游标
String key = it.next();
String value = it.getValue();
//或者使用
/*
it.next();//前提是必须用it.next()
String key = it.getKey();
String value = it.getValue();
/
System.out.println(key+"–>"+value);
}
}
/* - 去重迭代器
*/
public static void uniqueIt(){
System.out.println("=====去重迭代器=");
List list = new ArrayList();
list.add(“a”);
list.add(“b”);
list.add(“b”);
//包装;去掉重复的过滤器
Iterator it = new UniqueFilterIterator(list.iterator());
//循环
while(it.hasNext()){
System.out.println(it.next());
}
}
/** - 自定义过滤器
*/
public static void filterIt(){
System.out.println("=====自定义迭代器=");
List list = new ArrayList();
list.add(“reaer”);
list.add(“bcb”);
list.add(“bdef”);
list.add(“moom”);
//自定义条件判断
Predicate pre = new Predicate(){//Predicate断言
@Override
public boolean evaluate(String value) {//evaluate评价
//回文判断;StringBuilder可变的字符序列;reverse反转;toString转换成字符串;equals相等
return new StringBuilder(value).reverse().toString().equals(value);
}
};
//包装;去掉重复的过滤器
Iterator it = new FilterIterator(list.iterator(),pre);
//循环
while(it.hasNext()){
System.out.println(it.next());
}
}
/**循环迭代器
*/
public static void loopIt(){
System.out.println("=====循环迭代器=");
List list = new ArrayList();
list.add(“reaer”);
list.add(“bcb”);
list.add(“bdef”);
list.add(“moom”);
//循环输出
Iterator it = new LoopingIterator<>(list);for(int i=0;i<6;i++){ System.out.println("循环第"+(i+1)+"次"); System.out.println(it.next()); }
}
/**-
数组迭代器
*/
public static void arrayIt(){
System.out.println("=====数组迭代器=");
int[] arr = {1,2,3,4,5,6,7,8};
//数组的迭代器; 泛型只能使用在引用类型上面
Iterator it = new ArrayListIterator<>(arr);
while(it.hasNext()){
System.out.print(it.next()+";");}
System.out.println();
System.out.println(“循环位置选择”);
//数组元素,指定起始索引和结束索引 如;3–7;
Iterator it2 = new ArrayListIterator<>(arr,3,7);
while(it2.hasNext()){
System.out.print(it2.next()+";");
}
}
}
//结果-----------------------------------------------------------
=====map迭代器=
3–>王五
2–>李四
1–>张三
=====去重迭代器=
a
b
=====自定义迭代器=
reaer
bcb
moom
=====循环迭代器=
循环第1次
reaer
循环第2次
bcb
循环第3次
bdef
循环第4次
moom
循环第5次
reaer
循环第6次
bcb
=====数组迭代器=
1;2;3;4;5;6;7;8;
循环位置选择
4;5;6;7;
- map迭代器