您的位置:首页 > 编程语言 > Java开发

commons之迭代器(Map、过滤、循环)_双向Map_包JAVA141

2015-12-13 18:53 537 查看
来源:http://www.bjsxt.com/

1、S02E141_01commons之迭代器(Map、过滤、循环)、双向Map、包

a.迭代器(Map、去重、过滤、循环、数组)

package com.test.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访问
*  借助接口IterableMap的实现类HashedMap
* 2.UniqueFilterIterator 去重迭代器
* 3.FilterIterator 自定义过滤 + Predicate
* 4.new LoopingIterator() 循环迭代器
* 5.new ArrayListIterator() 数组迭代器
*/
public class TestIterator {

public static void main(String[] args) {
testMapIt();
testUniqueIt();
testFilterIt();
testLoopingIt();
testArrayListIt();
}
/**
* map迭代器
*/
public static void testMapIt(){
System.out.println("============map迭代器====================");
IterableMap<String, String> map = new HashedMap<String, String>();
map.put("a", "abcd");
map.put("b", "is");
map.put("c", "good");
//使用MapIterator
MapIterator<String, String> it = map.mapIterator();
while (it.hasNext()) {
//一定要it.next() 移动游标
/**
it.next()
String key = it.getKey();
*/
String key = it.next();
String value = it.getValue();
System.out.println(key + "-->>" + value);
}
}
/**
* 去重迭代器
*/
public static void testUniqueIt(){
System.out.println("=========去重迭代器=================");
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("a");
//去除重复的过滤器
Iterator<String> it = new UniqueFilterIterator(list.iterator());
while (it.hasNext()) {
System.out.println(it.next());
}
}
/**
* 自定义过滤迭代器
*/
public static void testFilterIt(){
System.out.println("=========自定义过滤迭代器=================");
List<String> list = new ArrayList<String>();
list.add("refer");
list.add("dad");
list.add("abcd");
list.add("moon");
//自定义条件判断
Predicate<String> pre = new Predicate<String>(){

@Override
public boolean evaluate(String value) {
//回文判断
return new StringBuilder(value).reverse().toString().equals(value);
}
};
//回文的过滤器
Iterator<String> it = new FilterIterator(list.iterator(),pre);
while (it.hasNext()) {
System.out.println(it.next());
}
}
/**
* 循环迭代器
*/
public static void testLoopingIt(){
System.out.println("=========循环迭代器=================");
List<String> list = new ArrayList<String>();
list.add("refer");
list.add("dad");
list.add("abcd");
list.add("moon");

Iterator<String> it = new LoopingIterator(list);
for (int i = 0; i < 6; i++) {
System.out.println(it.next());
}
}
/**
* 数组迭代器
*/
public static void testArrayListIt(){
System.out.println("=========数组迭代器=================");
int[] arr = {1,2,3,4,5};
Iterator<Integer> it1 = new ArrayListIterator<Integer>(arr);
System.out.println("不指定索引,打印全部元素:");
while (it1.hasNext()) {
System.out.println(it1.next());
}
//指定起始索引和结束索引
Iterator<Integer> it2 = new ArrayListIterator<Integer>(arr,1,3);
System.out.println("指定起始索引和结束索引:");
while (it2.hasNext()) {
System.out.println(it2.next());
}
}
}
/*
返回:
============map迭代器====================
a-->>abcd
c-->>good
b-->>is
=========去重迭代器=================
a
b
=========自定义过滤迭代器=================
refer
dad
=========循环迭代器=================
refer
dad
abcd
moon
refer
dad
=========数组迭代器=================
不指定索引,打印全部元素:
1
2
3
4
5
指定起始索引和结束索引:
2
3
*/


b.双向Map

package com.test.commons;

import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.MapIterator;
import org.apache.commons.collections4.bidimap.DualHashBidiMap;
import org.apache.commons.collections4.bidimap.DualTreeBidiMap;
/**
* 双向Map 要求键与值都不能重复,通过键找值,也可以通过值找键(需要反转inverseBidiMap())
* 接口BidiMap
* 实现类
* 1.DualTreeBidiMap:有序
* 2.DualHashBidiMap:无序
*/
public class TestBidiMap {

public static void main(String[] args) {
testDualHashBidiMap();
testDualTreeBidiMap();
}
/**
* 无序的双向Map
*/
public static void testDualHashBidiMap(){
System.out.println("============无序的双向Map==============");
BidiMap<String, String> map = new DualHashBidiMap<String,String>();
map.put("bc", "bc@test.com");
map.put("ab", "ab@qq.com");
//反转,通过值找键
System.out.println(map.inverseBidiMap().get("bc@test.com"));//打印:bc
//遍历查看
MapIterator<String, String> it = map.inverseBidiMap().mapIterator();
while (it.hasNext()) {
String key = it.next();
String value = it.getValue();
System.out.println(key + "-->>" + value);
}
}
/**
* 有序的双向Map
*/
public static void testDualTreeBidiMap(){
System.out.println("============有序的双向Map==============");
BidiMap<String, String> map = new DualTreeBidiMap<String,String>();
map.put("bc", "bc@test.com");
map.put("ab", "ab@qq.com");
MapIterator<String, String> it = map.inverseBidiMap().mapIterator();
while (it.hasNext()) {
String key = it.next();
String value = it.getValue();
System.out.println(key + "-->>" + value);
}
}
}
/*
返回:
============无序的双向Map==============
bc
ab@qq.com-->>ab
bc@test.com-->>bc
============有序的双向Map==============
ab@qq.com-->>ab
bc@test.com-->>bc
*/


c.包

package com.test.commons;

import java.util.Iterator;
import java.util.Set;

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
import org.apache.commons.collections4.bag.TreeBag;
/**
* Bag 包 允许重复
* 1.HashBag 无序
* 2.TreeBag 有序
* 统计单词出现的次数
*/
public class TestBag {

public static void main(String[] args) {
testHashBag();
testTreeBag();
statistic();
}
/**
* 无序的包
*/
public static void testHashBag(){
System.out.println("=======无序的包=====================");
Bag<String> bag = new HashBag<String>();
bag.add("a");
bag.add("b");
bag.add("a",5);
bag.remove("a",2);
bag.add("c");
Iterator<String> it = bag.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
/**
* 有序的包
*/
public static void testTreeBag(){
System.out.println("=======有序的包=====================");
Bag<String> bag = new TreeBag<String>();
bag.add("a");
bag.add("b");
bag.add("a",5);
bag.remove("a",2);
bag.add("c");
Iterator<String> it = bag.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
/**
* 统计单词出现的次数
*/
public static void statistic(){
String str = "this is a cat and that is a mice where is the food";
//分割字符串
String[] strArray = str.split(" ");
Bag<String> bag = new TreeBag<String>();
for (String temp : strArray) {
bag.add(temp);
}
System.out.println("==============统计次数===============");
Set<String> keys = bag.uniqueSet();
for (String letter : keys) {
System.out.println(letter + "-->>" + bag.getCount(letter));
}
}
}
/*
返回:
=======无序的包=====================
a
a
a
a
b
c
=======有序的包=====================
a
a
a
a
b
c
==============统计次数===============
a-->>2
and-->>1
cat-->>1
food-->>1
is-->>3
mice-->>1
that-->>1
the-->>1
this-->>1
where-->>1
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: