All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.gitee.apanlh.util.base.IteratorUtils Maven / Gradle / Ivy
package com.gitee.apanlh.util.base;
import com.gitee.apanlh.util.func.FuncFor;
import com.gitee.apanlh.util.func.FuncIterator;
import com.gitee.apanlh.util.func.FuncIterator2;
import com.gitee.apanlh.util.func.FuncIteratorBreak;
import com.gitee.apanlh.util.func.FuncIteratorBreak2;
import com.gitee.apanlh.util.func.FuncIteratorE;
import com.gitee.apanlh.util.func.FuncIteratorEBreak;
import com.gitee.apanlh.util.func.FuncIteratorK;
import com.gitee.apanlh.util.func.FuncIteratorK2;
import com.gitee.apanlh.util.func.FuncIteratorKBreak;
import com.gitee.apanlh.util.func.FuncIteratorResultE;
import com.gitee.apanlh.util.func.FuncIteratorV;
import com.gitee.apanlh.util.func.FuncIteratorV2;
import com.gitee.apanlh.util.func.FuncIteratorVBreak;
import com.gitee.apanlh.util.func.FuncLoop;
import com.gitee.apanlh.util.func.FuncLoopIndex;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
* 迭代器
*
* @author Pan
*/
public class IteratorUtils {
/**
* 构造函数
*
* @author Pan
*/
private IteratorUtils() {
// 不允许外部实例
super();
}
/**
* 重复循环遍历
* func返回true时,将重复循环(如果遍历至最后一个索引后将从0开始重复遍历)
* func返回false时,将停止循环
*
* @author Pan
* @param 数据类型
* @param list 集合
* @param func loop函数
*/
public static void repeatLoop(List list, FuncLoop func) {
if (list == null) {
return ;
}
int index = 0;
int size = list.size();
while (index < size) {
boolean next = func.get(list.get(index));
if (!next) {
break;
}
index = CollUtils.isLastIndex(list, index) ? 0 : index + 1;
}
}
/**
* 重复循环遍历-额外返回当前索引标识
* funcLoop返回true时,将重复循环(如果遍历至最后一个索引后将从0开始重复遍历)
* funcLoop返回false时,将停止循环
*
* @author Pan
* @param 数据类型
* @param list 集合
* @param func loop函数
*/
public static void repeatLoop(List list, FuncLoopIndex func) {
if (list == null) {
return ;
}
int index = 0;
int size = list.size();
while (index < size) {
boolean next = func.get(list.get(index), index);
if (!next) {
break;
}
index = CollUtils.isLastIndex(list, index) ? 0 : index + 1;
}
}
/**
* 循环遍历
*
* @author Pan
* @param 数据类型
* @param array 数组
* @param func for函数
*/
public static void array(T[] array, FuncFor func) {
if (array == null) {
return ;
}
for (int i = 0, len = array.length; i < len; i++) {
func.get(array[i]);
}
}
/**
* 循环遍历
*
* @author Pan
* @param 数据类型
* @param array 数组
* @param func for函数
*/
public static void array(List array, FuncFor func) {
if (array == null) {
return ;
}
for (int i = 0, len = array.size(); i < len; i++) {
func.get(array.get(i));
}
}
/**
* 循环遍历
*
* @author Pan
* @param 数据类型
* @param enumeration 枚举
* @param func 迭代函数
*/
public static void array(Enumeration enumeration, FuncFor func) {
if (enumeration == null) {
return ;
}
while (enumeration.hasMoreElements()) {
func.get(enumeration.nextElement());
}
}
/**
* 获取指定元素
* 索引从0开始计算
*
* @author Pan
* @param 数据类型
* @param collection 集合
* @param index 索引
* @return E
*/
public static E getElement(Collection collection, int index) {
if (collection == null || index < 0) {
return null;
}
int collectionSize = collection.size();
if (collectionSize == 0 || index > collectionSize) {
return null;
}
int currentIndex = 0;
if (currentIndex == index) {
return collection(collection).next();
}
E e = null;
Iterator iterator = collection(collection);
while (iterator.hasNext()) {
E e2 = iterator.next();
if (currentIndex == index) {
e = e2;
break;
}
currentIndex ++;
}
return e;
}
/**
* 获取首位元素
*
* @author Pan
* @param 数据类型
* @param collection 集合
* @return E
*/
public static E getFirst(Collection collection) {
if (collection == null) {
return null;
}
return getElement(collection, 0);
}
/**
* 获取最后元素
*
* @author Pan
* @param 数据类型
* @param collection 集合
* @return E
*/
public static E getLast(Collection collection) {
if (collection == null) {
return null;
}
return getElement(collection, collection.size() - 1);
}
/**
* 集合迭代器
*
* @author Pan
* @param 数据类型
* @param collection 集合
* @return E
*/
public static Iterator collection(Collection collection) {
return collection.iterator();
}
/**
* 集合迭代器
* 无返回值 提供next方法及返回iterator
*
* @author Pan
* @param 数据类型
* @param collection 集合
* @param funcIteratorE 迭代函数
*/
public static void collection(Collection collection, FuncIteratorE funcIteratorE) {
if (collection == null) {
return ;
}
iterator(collection(collection), funcIteratorE);
}
/**
* 集合迭代器
* 无返回值 提供next方法及返回iterator
*
* @author Pan
* @param 数据类型
* @param collection 集合
* @param funcIteratorBreak 迭代函数(可停止)
*/
public static void collectionBreak(Collection collection, FuncIteratorEBreak funcIteratorBreak) {
if (collection == null) {
return ;
}
iteratorBreak(collection(collection), funcIteratorBreak);
}
/**
* 集合迭代器
* 增加返回值
*
* @author Pan
* @param 数据类型
* @param 返回类型
* @param collection 集合
* @param func 迭代函数(可返回结果)
* @return R
*/
public static R collectionResult(Collection collection, FuncIteratorResultE func) {
iteratorBreak(collection(collection), func::next);
return func.call();
}
/**
* MapEntrySet迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @return Iterator
*/
public static Iterator> entrySet(Map map) {
if (map == null) {
return null;
}
return map.entrySet().iterator();
}
/**
* MapEntrySet迭代器
* 包含迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @param func 迭代函数
*/
public static void entrySet(Map map, FuncIterator func) {
if (map == null) {
return ;
}
iterator(entrySet(map), func);
}
/**
* MapEntrySet迭代器
* 不包含迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @param func 迭代函数
*/
public static void entrySet(Map map, FuncIterator2 func) {
if (map == null) {
return ;
}
iterator(entrySet(map), func);
}
/**
* MapEntrySet迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @param func 迭代函数
*/
public static void entrySetBreak(Map map, FuncIteratorBreak func) {
if (map == null) {
return ;
}
iteratorBreak(entrySet(map), func);
}
/**
* MapEntrySet迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @param func 迭代函数
*/
public static void entrySetBreak(Map map, FuncIteratorBreak2 func) {
if (map == null) {
return ;
}
iteratorBreak(entrySet(map), func);
}
/**
* KeySet迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @return Iterator
*/
public static Iterator keySet(Map map) {
if (map == null) {
return null;
}
return map.keySet().iterator();
}
/**
* KeySet迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @param func 迭代函数
*/
public static void keySet(Map map, FuncIteratorK func) {
if (map == null) {
return ;
}
iterator(keySet(map), func::next);
}
/**
* KeySet迭代器(不包含迭代器)
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @param func 迭代函数
*/
public static void keySet(Map map, FuncIteratorK2 func) {
if (map == null) {
return ;
}
iterator(keySet(map), func::next);
}
/**
* KeySet迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @param func 迭代函数
*/
public static void keySetBreak(Map map, FuncIteratorKBreak func) {
if (map == null) {
return ;
}
iterator(keySet(map), func::next);
}
/**
* Map集合迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @return Iterator
*/
public static Iterator values(Map map) {
if (map == null) {
return null;
}
return collection(map.values());
}
/**
* Map集合迭代器
* 不包含迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @param func 迭代函数
*/
public static void values(Map map, FuncIteratorV func) {
if (map == null) {
return ;
}
iterator(collection(map.values()), func::next);
}
/**
* Map集合迭代器
* 包含迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @param func 迭代函数
*/
public static void values(Map map, FuncIteratorV2 func) {
if (map == null) {
return ;
}
iterator(collection(map.values()), func::next);
}
/**
* Map集合迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param map map
* @param func 迭代函数
*/
public static void valuesBreak(Map map, FuncIteratorVBreak func) {
if (map == null) {
return ;
}
iterator(collection(map.values()), func::next);
}
/**
* 迭代器
*
* @author Pan
* @param 数据类型
* @param iterator 迭代器
* @param func 迭代函数
*/
public static void iterator(Iterator iterator, FuncFor func) {
if (iterator == null) {
return ;
}
while (iterator.hasNext()) {
func.get(iterator.next());
}
}
/**
* 迭代器
*
* @author Pan
* @param 数据类型
* @param iterator 迭代器
* @param func 迭代函数
*/
public static void iterator(Iterator iterator, FuncIteratorE func) {
if (iterator == null) {
return ;
}
while (iterator.hasNext()) {
func.next(iterator.next(), iterator);
}
}
/**
* 迭代器
*
* @author Pan
* @param 数据类型
* @param iterator 迭代器
* @param func 迭代函数
*/
public static void iteratorBreak(Iterator iterator, FuncIteratorEBreak func) {
if (iterator == null) {
return ;
}
while (iterator.hasNext()) {
if (!func.next(iterator.next(), iterator)) {
break;
}
}
}
/**
* 迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param iterator 迭代器
* @param func 迭代函数
*/
public static void iterator(Iterator> iterator, FuncIterator func) {
if (iterator == null) {
return ;
}
while (iterator.hasNext()) {
Entry next = iterator.next();
func.next(next.getKey(), next.getValue(), iterator);
}
}
/**
* 迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param iterator 迭代器
* @param func 迭代函数
*/
public static void iterator(Iterator> iterator, FuncIterator2 func) {
if (iterator == null) {
return ;
}
while (iterator.hasNext()) {
Entry next = iterator.next();
func.next(next.getKey(), next.getValue());
}
}
/**
* 迭代器
*
* @author Pan
* @param 键类型
* @param 值类型
* @param iterator 迭代器
* @param func 迭代函数
*/
public static void iteratorBreak(Iterator> iterator, FuncIteratorBreak func) {
if (iterator == null) {
return ;
}
while (iterator.hasNext()) {
Entry next = iterator.next();
if (!func.next(next.getKey(), next.getValue(), iterator)) {
break;
}
}
}
/**
* 迭代器
* 迭代是可中断迭代
* true则继续 false则终止
*
* @author Pan
* @param 键类型
* @param 值类型
* @param iterator 迭代器
* @param func 迭代函数
*/
public static void iteratorBreak(Iterator> iterator, FuncIteratorBreak2 func) {
if (iterator == null) {
return ;
}
while (iterator.hasNext()) {
Entry next = iterator.next();
if (!func.next(next.getKey(), next.getValue())) {
break;
}
}
}
}