All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gitee.apanlh.util.base.IteratorUtils Maven / Gradle / Ivy

There is a newer version: 2.0.0.2
Show newest version
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; } } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy