com.dahuatech.hutool.core.collection.IterUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java-sdk-common Show documentation
Show all versions of java-sdk-common Show documentation
Dahua ICC Open API SDK for Java
package com.dahuatech.hutool.core.collection;
import com.dahuatech.hutool.core.lang.Filter;
import com.dahuatech.hutool.core.map.MapUtil;
import com.dahuatech.hutool.core.util.ArrayUtil;
import com.dahuatech.hutool.core.util.ReflectUtil;
import com.dahuatech.hutool.core.util.StrUtil;
import java.util.*;
import java.util.Map.Entry;
/**
* {@link Iterable} 和 {@link Iterator} 相关工具类
*
* @author Looly
* @since 3.1.0
*/
public class IterUtil {
/**
* Iterable是否为空
*
* @param iterable Iterable对象
* @return 是否为空
*/
public static boolean isEmpty(Iterable> iterable) {
return null == iterable || isEmpty(iterable.iterator());
}
/**
* Iterator是否为空
*
* @param Iterator Iterator对象
* @return 是否为空
*/
public static boolean isEmpty(Iterator> Iterator) {
return null == Iterator || false == Iterator.hasNext();
}
/**
* Iterable是否为空
*
* @param iterable Iterable对象
* @return 是否为空
*/
public static boolean isNotEmpty(Iterable> iterable) {
return null != iterable && isNotEmpty(iterable.iterator());
}
/**
* Iterator是否为空
*
* @param Iterator Iterator对象
* @return 是否为空
*/
public static boolean isNotEmpty(Iterator> Iterator) {
return null != Iterator && Iterator.hasNext();
}
/**
* 是否包含{@code null}元素
*
* @param iter 被检查的{@link Iterable}对象,如果为{@code null} 返回false
* @return 是否包含{@code null}元素
*/
public static boolean hasNull(Iterable> iter) {
return hasNull(null == iter ? null : iter.iterator());
}
/**
* 是否包含{@code null}元素
*
* @param iter 被检查的{@link Iterator}对象,如果为{@code null} 返回false
* @return 是否包含{@code null}元素
*/
public static boolean hasNull(Iterator> iter) {
if (null == iter) {
return true;
}
while (iter.hasNext()) {
if (null == iter.next()) {
return true;
}
}
return false;
}
/**
* 是否全部元素为null
*
* @param iter iter 被检查的{@link Iterable}对象,如果为{@code null} 返回true
* @return 是否全部元素为null
* @since 3.3.0
*/
public static boolean isAllNull(Iterable> iter) {
return isAllNull(null == iter ? null : iter.iterator());
}
/**
* 是否全部元素为null
*
* @param iter iter 被检查的{@link Iterator}对象,如果为{@code null} 返回true
* @return 是否全部元素为null
* @since 3.3.0
*/
public static boolean isAllNull(Iterator> iter) {
if (null == iter) {
return true;
}
while (iter.hasNext()) {
if (null != iter.next()) {
return false;
}
}
return true;
}
/**
* 根据集合返回一个元素计数的 {@link Map}
* 所谓元素计数就是假如这个集合中某个元素出现了n次,那将这个元素做为key,n做为value
* 例如:[a,b,c,c,c] 得到:
* a: 1
* b: 1
* c: 3
*
* @param 集合元素类型
* @param iter {@link Iterable},如果为null返回一个空的Map
* @return {@link Map}
*/
public static Map countMap(Iterable iter) {
return countMap(null == iter ? null : iter.iterator());
}
/**
* 根据集合返回一个元素计数的 {@link Map}
* 所谓元素计数就是假如这个集合中某个元素出现了n次,那将这个元素做为key,n做为value
* 例如:[a,b,c,c,c] 得到:
* a: 1
* b: 1
* c: 3
*
* @param 集合元素类型
* @param iter {@link Iterator},如果为null返回一个空的Map
* @return {@link Map}
*/
public static Map countMap(Iterator iter) {
final HashMap countMap = new HashMap<>();
if (null != iter) {
Integer count;
T t;
while (iter.hasNext()) {
t = iter.next();
count = countMap.get(t);
if (null == count) {
countMap.put(t, 1);
} else {
countMap.put(t, count + 1);
}
}
}
return countMap;
}
/**
* 字段值与列表值对应的Map,常用于元素对象中有唯一ID时需要按照这个ID查找对象的情况
* 例如:车牌号 =》车
*
* @param 字段名对应值得类型,不确定请使用Object
* @param 对象类型
* @param iter 对象列表
* @param fieldName 字段名(会通过反射获取其值)
* @return 某个字段值与对象对应Map
* @since 4.0.4
*/
public static Map fieldValueMap(Iterable iter, String fieldName) {
return fieldValueMap(null == iter ? null : iter.iterator(), fieldName);
}
/**
* 字段值与列表值对应的Map,常用于元素对象中有唯一ID时需要按照这个ID查找对象的情况
* 例如:车牌号 =》车
*
* @param 字段名对应值得类型,不确定请使用Object
* @param 对象类型
* @param iter 对象列表
* @param fieldName 字段名(会通过反射获取其值)
* @return 某个字段值与对象对应Map
* @since 4.0.4
*/
@SuppressWarnings("unchecked")
public static Map fieldValueMap(Iterator iter, String fieldName) {
final Map result = new HashMap<>();
if (null != iter) {
V value;
while (iter.hasNext()) {
value = iter.next();
result.put((K) ReflectUtil.getFieldValue(value, fieldName), value);
}
}
return result;
}
/**
* 两个字段值组成新的Map
*
* @param 字段名对应值得类型,不确定请使用Object
* @param 值类型,不确定使用Object
* @param iterable 对象列表
* @param fieldNameForKey 做为键的字段名(会通过反射获取其值)
* @param fieldNameForValue 做为值的字段名(会通过反射获取其值)
* @return 某个字段值与对象对应Map
* @since 4.6.2
*/
public static Map fieldValueAsMap(
Iterable> iterable, String fieldNameForKey, String fieldNameForValue) {
return fieldValueAsMap(
null == iterable ? null : iterable.iterator(), fieldNameForKey, fieldNameForValue);
}
/**
* 两个字段值组成新的Map
*
* @param 字段名对应值得类型,不确定请使用Object
* @param 值类型,不确定使用Object
* @param iter 对象列表
* @param fieldNameForKey 做为键的字段名(会通过反射获取其值)
* @param fieldNameForValue 做为值的字段名(会通过反射获取其值)
* @return 某个字段值与对象对应Map
* @since 4.0.10
*/
@SuppressWarnings("unchecked")
public static Map fieldValueAsMap(
Iterator> iter, String fieldNameForKey, String fieldNameForValue) {
final Map result = new HashMap<>();
if (null != iter) {
Object value;
while (iter.hasNext()) {
value = iter.next();
result.put(
(K) ReflectUtil.getFieldValue(value, fieldNameForKey),
(V) ReflectUtil.getFieldValue(value, fieldNameForValue));
}
}
return result;
}
/**
* 获取指定Bean列表中某个字段,生成新的列表
*
* @param 对象类型
* @param iterable 对象列表
* @param fieldName 字段名(会通过反射获取其值)
* @return 某个字段值与对象对应Map
* @since 4.6.2
*/
public static List