Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
勤为径苦作舟
ZUtil
提交
e28ecbb9
Z
ZUtil
项目概览
勤为径苦作舟
/
ZUtil
大约 1 年 前同步成功
通知
6
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Z
ZUtil
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e28ecbb9
编写于
1月 27, 2023
作者:
勤为径苦作舟
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: 修复 是否每个对象的每个元素都相等(isAllEquals)方法错误并完善覆盖率测试
上级
c19b53ce
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
218 addition
and
98 deletion
+218
-98
src/main/java/top/csaf/CollectionUtils.java
src/main/java/top/csaf/CollectionUtils.java
+139
-80
src/test/java/top/csaf/junit/CollectionUtilsTest.java
src/test/java/top/csaf/junit/CollectionUtilsTest.java
+79
-18
未找到文件。
src/main/java/top/csaf/CollectionUtils.java
浏览文件 @
e28ecbb9
...
@@ -345,15 +345,15 @@ public class CollectionUtils {
...
@@ -345,15 +345,15 @@ public class CollectionUtils {
}
}
/**
/**
* 转为字符串,
Float、Double、BigDecimal
小数点后多余的 0 会被去除
* 转为字符串,
Number
小数点后多余的 0 会被去除
*
*
* @param object 需转换的对象
* @param object 需转换的对象
* @param is
By
String 是否转换
* @param is
To
String 是否转换
* @return 字符串
* @return 字符串
*/
*/
private
static
Object
stripTrailingZerosToString
(
Object
object
,
boolean
isBy
String
)
{
private
static
Object
stripTrailingZerosToString
(
Object
object
,
final
boolean
isTo
String
)
{
if
(
is
By
String
)
{
if
(
is
To
String
)
{
if
(
object
instanceof
Float
||
object
instanceof
Double
||
object
instanceof
BigDecimal
)
{
if
(
object
instanceof
Number
)
{
object
=
new
BigDecimal
(
object
.
toString
()).
stripTrailingZeros
().
toPlainString
();
object
=
new
BigDecimal
(
object
.
toString
()).
stripTrailingZeros
().
toPlainString
();
}
else
{
}
else
{
object
=
object
.
toString
();
object
=
object
.
toString
();
...
@@ -365,129 +365,160 @@ public class CollectionUtils {
...
@@ -365,129 +365,160 @@ public class CollectionUtils {
/**
/**
* 是否 每个对象的每个元素都相等
* 是否 每个对象的每个元素都相等
*
*
* @param isByString 是否根据 toString() 的值来判断是否相等,Float、Double、BigDecimal 小数点后多余的 0 会被去除
* @param isToString 是否根据 toString() 的值来判断是否相等,
* @param continueFunction 对象何时不参与判断
* Number 会去除小数点后多余的 0。
* @param objects 多个对象
* @param continueFunction 对象何时不参与判断。Iterator、Enumeration 会在判断前转换为 List。
* @param objects 多个对象。Iterator、Enumeration 会被使用掉。
* @return 是否 每个对象的每个元素都相等
* @return 是否 每个对象的每个元素都相等
*/
*/
public
static
boolean
isAllEquals
(
boolean
isByString
,
Function
<
Object
,
Boolean
>
continueFunction
,
final
Object
...
objects
)
{
public
static
boolean
isAllEquals
(
final
boolean
isToString
,
final
Function
<
Object
,
Boolean
>
continueFunction
,
@NonNull
final
Object
...
objects
)
{
if
(
objects
==
null
)
{
if
(
objects
.
length
<
2
)
{
return
true
;
throw
new
IllegalArgumentException
(
"Objects: length must be greater than 1."
);
}
if
(
objects
.
length
==
0
)
{
throw
new
IllegalArgumentException
(
"Objects: length should be greater than 0"
);
}
}
Object
prevObj
=
null
;
Object
prevObj
=
null
;
for
(
Object
object
:
objects
)
{
boolean
isAssigned
=
false
;
// continueFunction 中可能已经使用了 Iterator,所以在调用前转换为 List
for
(
int
i
=
0
;
i
<
objects
.
length
;
i
++)
{
Object
object
=
objects
[
i
];
// 满足条件时对象不参与判断
if
(
continueFunction
!=
null
)
{
// Iterator、Enumeration 在 continueFunction 可能需要循环,所以先转换为 List,避免后续无法循环
if
(
object
instanceof
Iterator
<?>)
{
if
(
object
instanceof
Iterator
<?>)
{
object
=
IteratorUtils
.
toList
((
Iterator
<?>)
object
);
object
=
IteratorUtils
.
toList
((
Iterator
<?>)
object
);
objects
[
i
]
=
object
;
}
else
if
(
object
instanceof
Enumeration
<?>)
{
object
=
EnumerationUtils
.
toList
((
Enumeration
<?>)
object
);
objects
[
i
]
=
object
;
}
}
// 对象指定条件时不参与判断
if
(
continueFunction
!=
null
&&
continueFunction
.
apply
(
object
))
{
if
(
Boolean
.
TRUE
.
equals
(
continueFunction
.
apply
(
object
)
))
{
continue
;
continue
;
}
}
if
(
object
instanceof
Collection
<?>
||
object
instanceof
Map
<?,
?>)
{
}
if
(
object
instanceof
Iterable
<?>
||
object
instanceof
Iterator
<?>
||
object
instanceof
Map
<?,
?>)
{
Iterator
<?>
iterator
;
Iterator
<?>
iterator
;
if
(
object
instanceof
Collection
<?>)
{
if
(
object
instanceof
Iterable
<?>)
{
iterator
=
((
Collection
<?>)
object
).
iterator
();
iterator
=
((
Iterable
<?>)
object
).
iterator
();
}
else
{
}
else
if
(
object
instanceof
Map
<?,
?>)
{
iterator
=
(((
Map
<?,
?>)
object
).
values
()).
iterator
();
iterator
=
(((
Map
<?,
?>)
object
).
values
()).
iterator
();
}
else
{
iterator
=
(
Iterator
<?>)
object
;
}
}
int
i
=
0
;
while
(
iterator
.
hasNext
())
{
while
(
iterator
.
hasNext
())
{
// 基础类型转为 String
Object
nextObj
=
iterator
.
next
();
Object
nextObj
=
stripTrailingZerosToString
(
iterator
.
next
(),
isByString
);
/** {@link com.google.gson.JsonArray } 循环时需转换为 JsonPrimitive 后处理 */
// 首次判断前跳过第一次循环
if
(
nextObj
instanceof
JsonPrimitive
)
{
if
(
prevObj
==
null
&&
i
==
0
)
{
JsonPrimitive
jsonPrimitive
=
(
JsonPrimitive
)
nextObj
;
prevObj
=
nextObj
;
nextObj
=
jsonPrimitive
.
isNumber
()
?
jsonPrimitive
.
getAsBigDecimal
()
:
jsonPrimitive
.
getAsString
();
i
=
1
;
continue
;
}
if
(!
Objects
.
equals
(
prevObj
,
nextObj
))
{
return
false
;
}
prevObj
=
nextObj
;
}
}
}
else
if
(
object
instanceof
Iterable
<?>)
{
int
i
=
0
;
// 转为字符串,Number 小数点后多余的 0 会被去除
for
(
Object
o
:
(
Iterable
<?>)
object
)
{
nextObj
=
stripTrailingZerosToString
(
nextObj
,
isToString
);
Object
nextObj
=
stripTrailingZerosToString
(
o
,
isByString
);
// 首次判断前跳过第一次循环
if
(
prevObj
==
null
&&
i
==
0
)
{
if
(
prevObj
==
null
&&
!
isAssigned
)
{
// 上一次元素赋值
prevObj
=
nextObj
;
prevObj
=
nextObj
;
i
=
1
;
i
sAssigned
=
true
;
continue
;
continue
;
}
}
if
(!
Objects
.
equals
(
prevObj
,
nextObj
))
{
if
(!
Objects
.
equals
(
prevObj
,
nextObj
))
{
return
false
;
return
false
;
}
}
prevObj
=
nextObj
;
}
}
}
else
if
(
object
instanceof
Object
[])
{
}
else
if
(
object
instanceof
Object
[])
{
Object
[]
objects1
=
(
Object
[])
object
;
Object
[]
array
=
(
Object
[])
object
;
for
(
int
i
=
0
;
i
<
objects1
.
length
;
i
++
)
{
for
(
Object
o
:
array
)
{
Object
nextObj
=
stripTrailingZerosToString
(
o
bjects1
[
i
],
isBy
String
);
Object
nextObj
=
stripTrailingZerosToString
(
o
,
isTo
String
);
if
(
prevObj
==
null
&&
i
==
0
)
{
if
(
prevObj
==
null
&&
!
isAssigned
)
{
prevObj
=
nextObj
;
prevObj
=
nextObj
;
i
=
1
;
i
sAssigned
=
true
;
continue
;
continue
;
}
}
if
(!
Objects
.
equals
(
prevObj
,
nextObj
))
{
if
(!
Objects
.
equals
(
prevObj
,
nextObj
))
{
return
false
;
return
false
;
}
}
prevObj
=
nextObj
;
}
}
}
else
if
(
object
instanceof
Enumeration
<?>)
{
}
else
if
(
object
instanceof
Enumeration
<?>)
{
Enumeration
<?>
enumeration
=
(
Enumeration
<?>)
object
;
Enumeration
<?>
enumeration
=
(
Enumeration
<?>)
object
;
int
i
=
0
;
while
(
enumeration
.
hasMoreElements
())
{
while
(
enumeration
.
hasMoreElements
())
{
Object
nextObj
=
stripTrailingZerosToString
(
enumeration
.
nextElement
(),
is
By
String
);
Object
nextObj
=
stripTrailingZerosToString
(
enumeration
.
nextElement
(),
is
To
String
);
if
(
prevObj
==
null
&&
i
==
0
)
{
if
(
prevObj
==
null
&&
!
isAssigned
)
{
prevObj
=
nextObj
;
prevObj
=
nextObj
;
i
=
1
;
i
sAssigned
=
true
;
continue
;
continue
;
}
}
if
(!
Objects
.
equals
(
prevObj
,
nextObj
))
{
if
(!
Objects
.
equals
(
prevObj
,
nextObj
))
{
return
false
;
return
false
;
}
}
prevObj
=
nextObj
;
}
}
}
else
{
return
false
;
}
}
}
}
return
true
;
return
true
;
}
}
/**
* 是否 每个对象的每个元素都相等
* <p>
* 会根据 toString() 的值来判断是否相等,Number 会去除小数点后多余的 0。
*
* @param continueFunction 对象何时不参与判断。Iterator、Enumeration 会在判断前转换为 List。
* @param objects 多个对象。Iterator、Enumeration 会被使用掉。
* @return 是否 每个对象的每个元素都相等
*/
public
static
boolean
isAllEquals
(
final
Function
<
Object
,
Boolean
>
continueFunction
,
@NonNull
final
Object
...
objects
)
{
return
isAllEquals
(
true
,
continueFunction
,
objects
);
}
/**
/**
* 是否不满足 每个对象的每个元素都相等
* 是否不满足 每个对象的每个元素都相等
*
*
* @param isByString 是否根据 toString() 的值来判断是否相等,Float、Double、BigDecimal 小数点后多余的 0 会被去除
* @param isToString 是否根据 toString() 的值来判断是否相等,
* @param continueFunction 对象何时不参与判断
* Number 会去除小数点后多余的 0。
* @param objects 多个对象
* @param continueFunction 对象何时不参与判断。Iterator、Enumeration 会在判断前转换为 List。
* @param objects 多个对象。Iterator、Enumeration 会被使用掉。
* @return 是否不满足 每个对象的每个元素都相等
*/
public
static
boolean
isNotAllEquals
(
final
boolean
isToString
,
final
Function
<
Object
,
Boolean
>
continueFunction
,
final
Object
...
objects
)
{
return
!
isAllEquals
(
isToString
,
continueFunction
,
objects
);
}
/**
* 是否不满足 每个对象的每个元素都相等
* <p>
* 会根据 toString() 的值来判断是否相等,Number 会去除小数点后多余的 0。
*
* @param continueFunction 对象何时不参与判断。Iterator、Enumeration 会在判断前转换为 List。
* @param objects 多个对象。Iterator、Enumeration 会被使用掉。
* @return 是否不满足 每个对象的每个元素都相等
* @return 是否不满足 每个对象的每个元素都相等
*/
*/
public
static
boolean
isNotAllEquals
(
boolean
isByString
,
Function
<
Object
,
Boolean
>
continueFunction
,
final
Object
...
objects
)
{
public
static
boolean
isNotAllEquals
(
final
Function
<
Object
,
Boolean
>
continueFunction
,
@NonNull
final
Object
...
objects
)
{
return
!
isAllEquals
(
isByString
,
continueFunction
,
objects
);
return
isNotAllEquals
(
true
,
continueFunction
,
objects
);
}
}
/**
/**
* 是否 每个对象的同一位置的元素都相等
* 是否 每个对象的同一位置的元素都相等
*
*
* @param is
By
String 是否根据 toString() 的值来判断是否相等,
* @param is
To
String 是否根据 toString() 的值来判断是否相等,
*
Float、Double、BigDecimal
会去除小数点后多余的 0。
*
Number
会去除小数点后多余的 0。
* @param continueFunction 对象何时不参与判断
* @param continueFunction 对象何时不参与判断
。Iterator、Enumeration 会在判断前转换为 List。
* @param objects 多个对象。Iterator、Enumeration 会被使用掉。
* @param objects 多个对象。Iterator、Enumeration 会被使用掉。
* @return 是否 每个对象的同一位置的元素都相等
* @return 是否 每个对象的同一位置的元素都相等
*/
*/
public
static
boolean
isAllEqualsSameIndex
(
final
boolean
is
By
String
,
final
Function
<
Object
,
Boolean
>
continueFunction
,
@NonNull
final
Object
...
objects
)
{
public
static
boolean
isAllEqualsSameIndex
(
final
boolean
is
To
String
,
final
Function
<
Object
,
Boolean
>
continueFunction
,
@NonNull
final
Object
...
objects
)
{
if
(
objects
.
length
<
2
)
{
if
(
objects
.
length
<
2
)
{
throw
new
IllegalArgumentException
(
"Objects: length must be greater than 1"
);
throw
new
IllegalArgumentException
(
"Objects: length must be greater than 1
.
"
);
}
}
Integer
prevObjSize
=
null
;
Integer
prevObjSize
=
null
;
for
(
int
i
=
0
;
i
<
objects
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
objects
.
length
;
i
++)
{
Object
object
=
objects
[
i
];
Object
object
=
objects
[
i
];
// Iterator、Enumeration 获取对象元素长度时可能需要循环,所以先转换为 List,避免后续无法循环
// Iterator、Enumeration
在 continueFunction 或
获取对象元素长度时可能需要循环,所以先转换为 List,避免后续无法循环
if
(
object
instanceof
Iterator
<?>)
{
if
(
object
instanceof
Iterator
<?>)
{
object
=
IteratorUtils
.
toList
((
Iterator
<?>)
object
);
object
=
IteratorUtils
.
toList
((
Iterator
<?>)
object
);
objects
[
i
]
=
object
;
objects
[
i
]
=
object
;
...
@@ -516,6 +547,8 @@ public class CollectionUtils {
...
@@ -516,6 +547,8 @@ public class CollectionUtils {
objSize
=
((
Map
<?,
?>)
object
).
values
().
size
();
objSize
=
((
Map
<?,
?>)
object
).
values
().
size
();
}
else
if
(
object
instanceof
Object
[])
{
}
else
if
(
object
instanceof
Object
[])
{
objSize
=
((
Object
[])
object
).
length
;
objSize
=
((
Object
[])
object
).
length
;
}
else
{
return
false
;
}
}
// 当前对象元素长度和上一次循环的对象元素长度不一致时退出
// 当前对象元素长度和上一次循环的对象元素长度不一致时退出
if
(
prevObjSize
!=
null
&&
!
prevObjSize
.
equals
(
objSize
))
{
if
(
prevObjSize
!=
null
&&
!
prevObjSize
.
equals
(
objSize
))
{
...
@@ -532,7 +565,7 @@ public class CollectionUtils {
...
@@ -532,7 +565,7 @@ public class CollectionUtils {
}
}
// Iterable、Map
// Iterable、Map
if
(
object
instanceof
Iterable
<?>
||
object
instanceof
Iterator
<?>
||
object
instanceof
Map
<?,
?>)
{
if
(
object
instanceof
Iterable
<?>
||
object
instanceof
Map
<?,
?>)
{
// 不同类型获取 Iterator
// 不同类型获取 Iterator
Iterator
<?>
iterator
;
Iterator
<?>
iterator
;
if
(
object
instanceof
Iterable
<?>)
{
if
(
object
instanceof
Iterable
<?>)
{
...
@@ -541,8 +574,7 @@ public class CollectionUtils {
...
@@ -541,8 +574,7 @@ public class CollectionUtils {
iterator
=
(((
Map
<?,
?>)
object
).
values
()).
iterator
();
iterator
=
(((
Map
<?,
?>)
object
).
values
()).
iterator
();
}
}
int
i
=
0
;
for
(
int
i
=
0
;
iterator
.
hasNext
();
i
++)
{
for
(;
iterator
.
hasNext
();
i
++)
{
Object
nextObj
=
iterator
.
next
();
Object
nextObj
=
iterator
.
next
();
/** {@link com.google.gson.JsonArray } 循环时需转换为 JsonPrimitive 后处理 */
/** {@link com.google.gson.JsonArray } 循环时需转换为 JsonPrimitive 后处理 */
if
(
nextObj
instanceof
JsonPrimitive
)
{
if
(
nextObj
instanceof
JsonPrimitive
)
{
...
@@ -550,8 +582,8 @@ public class CollectionUtils {
...
@@ -550,8 +582,8 @@ public class CollectionUtils {
nextObj
=
jsonPrimitive
.
isNumber
()
?
jsonPrimitive
.
getAsBigDecimal
()
:
jsonPrimitive
.
getAsString
();
nextObj
=
jsonPrimitive
.
isNumber
()
?
jsonPrimitive
.
getAsBigDecimal
()
:
jsonPrimitive
.
getAsString
();
}
}
//
基础类型转为 String
//
转为字符串,Number 小数点后多余的 0 会被去除
nextObj
=
stripTrailingZerosToString
(
nextObj
,
is
By
String
);
nextObj
=
stripTrailingZerosToString
(
nextObj
,
is
To
String
);
// 如果上一次列表的长度 < i + 1,即 prevList(上一次列表)未填充完需要判断的第一个对象的所有元素
// 如果上一次列表的长度 < i + 1,即 prevList(上一次列表)未填充完需要判断的第一个对象的所有元素
if
(
prevList
.
size
()
<
i
+
1
)
{
if
(
prevList
.
size
()
<
i
+
1
)
{
prevList
.
add
(
nextObj
);
prevList
.
add
(
nextObj
);
...
@@ -565,9 +597,9 @@ public class CollectionUtils {
...
@@ -565,9 +597,9 @@ public class CollectionUtils {
}
}
// Object[]
// Object[]
else
if
(
object
instanceof
Object
[])
{
else
if
(
object
instanceof
Object
[])
{
Object
[]
objects1
=
(
Object
[])
object
;
Object
[]
array
=
(
Object
[])
object
;
for
(
int
i
=
0
;
i
<
objects1
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
array
.
length
;
i
++)
{
Object
nextObj
=
stripTrailingZerosToString
(
objects1
[
i
],
isBy
String
);
Object
nextObj
=
stripTrailingZerosToString
(
array
[
i
],
isTo
String
);
if
(
prevList
.
size
()
<
i
+
1
)
{
if
(
prevList
.
size
()
<
i
+
1
)
{
prevList
.
add
(
nextObj
);
prevList
.
add
(
nextObj
);
continue
;
continue
;
...
@@ -581,15 +613,42 @@ public class CollectionUtils {
...
@@ -581,15 +613,42 @@ public class CollectionUtils {
return
true
;
return
true
;
}
}
/**
* 是否 每个对象的同一位置的元素都相等
* <p>
* 会根据 toString() 的值来判断是否相等,Number 会去除小数点后多余的 0。
*
* @param continueFunction 对象何时不参与判断。Iterator、Enumeration 会在判断前转换为 List。
* @param objects 多个对象。Iterator、Enumeration 会被使用掉。
* @return 是否 每个对象的同一位置的元素都相等
*/
public
static
boolean
isAllEqualsSameIndex
(
final
Function
<
Object
,
Boolean
>
continueFunction
,
@NonNull
final
Object
...
objects
)
{
return
isAllEqualsSameIndex
(
true
,
continueFunction
,
objects
);
}
/**
/**
* 是否不满足 每个对象的同一位置的元素都相等
* 是否不满足 每个对象的同一位置的元素都相等
*
*
* @param isByString 是否根据 toString() 的值来判断是否相等,Float、Double、BigDecimal 小数点后多余的 0 会被去除
* @param isToString 是否根据 toString() 的值来判断是否相等,
* Number 会去除小数点后多余的 0。
* @param continueFunction 对象何时不参与判断
* @param continueFunction 对象何时不参与判断
* @param objects 多个对象
* @param objects 多个对象。Iterator、Enumeration 会被使用掉。
* @return 是否不满足 每个对象的同一位置的元素都相等
*/
public
static
boolean
isNotAllEqualsSameIndex
(
final
boolean
isToString
,
final
Function
<
Object
,
Boolean
>
continueFunction
,
@NonNull
final
Object
...
objects
)
{
return
!
isAllEqualsSameIndex
(
isToString
,
continueFunction
,
objects
);
}
/**
* 是否不满足 每个对象的同一位置的元素都相等
* <p>
* 会根据 toString() 的值来判断是否相等,Number 会去除小数点后多余的 0。
*
* @param continueFunction 对象何时不参与判断。Iterator、Enumeration 会在判断前转换为 List。
* @param objects 多个对象。Iterator、Enumeration 会被使用掉。
* @return 是否不满足 每个对象的同一位置的元素都相等
* @return 是否不满足 每个对象的同一位置的元素都相等
*/
*/
public
static
boolean
isNotAllEqualsSameIndex
(
boolean
isByString
,
Function
<
Object
,
Boolean
>
continueFunction
,
final
Object
...
objects
)
{
public
static
boolean
isNotAllEqualsSameIndex
(
final
Function
<
Object
,
Boolean
>
continueFunction
,
@NonNull
final
Object
...
objects
)
{
return
!
isAllEqualsSameIndex
(
isByString
,
continueFunction
,
objects
);
return
isNotAllEqualsSameIndex
(
true
,
continueFunction
,
objects
);
}
}
}
}
src/test/java/top/csaf/junit/CollectionUtilsTest.java
浏览文件 @
e28ecbb9
...
@@ -9,6 +9,7 @@ import top.csaf.CollectionUtils;
...
@@ -9,6 +9,7 @@ import top.csaf.CollectionUtils;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.math.BigInteger
;
import
java.math.BigInteger
;
import
java.util.*
;
import
java.util.*
;
import
java.util.function.Function
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
...
@@ -80,29 +81,64 @@ public class CollectionUtilsTest {
...
@@ -80,29 +81,64 @@ public class CollectionUtilsTest {
@DisplayName
(
"是否 每个对象的每个元素都相等"
)
@DisplayName
(
"是否 每个对象的每个元素都相等"
)
@Test
@Test
void
isAllEquals
()
{
void
isAllEquals
()
{
List
<
String
>
list
=
new
ArrayList
<>();
/** {@link CollectionUtils#isAllEquals(boolean, Function, Object...)} */
assertThrows
(
NullPointerException
.
class
,
()
->
CollectionUtils
.
isAllEquals
(
true
,
null
,
null
));
assertThrows
(
IllegalArgumentException
.
class
,
()
->
CollectionUtils
.
isAllEquals
(
true
,
null
,
new
Object
[]{}));
List
<
Object
>
list
=
new
ArrayList
<>();
list
.
add
(
"1"
);
list
.
add
(
"1"
);
List
<
String
>
list1
=
new
ArrayList
<>();
List
<
Object
>
list1
=
new
ArrayList
<>();
list1
.
add
(
"1"
);
list1
.
add
(
new
BigInteger
(
"1"
));
List
<
String
>
list2
=
new
ArrayList
<>();
JsonArray
jsonArray
=
new
JsonArray
();
jsonArray
.
add
(
'1'
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
""
,
"1"
);
map
.
put
(
"1"
,
new
BigDecimal
(
"1"
));
println
(
"忽略 null 和空元素:"
+
CollectionUtils
.
isAllEquals
(
false
,
CollectionUtils:
:
sizeIsEmpty
,
list
,
list1
.
iterator
(),
null
,
list2
,
map
));
Object
[]
array
=
new
Object
[]{
1.0
};
List
<
String
>
list3
=
new
ArrayList
<>();
Vector
<
Object
>
vector
=
new
Vector
<>();
list3
.
add
(
null
);
vector
.
add
(
1.0f
);
println
(
"忽略 null 和空元素和元素为 null:"
+
CollectionUtils
.
isAllEquals
(
false
,
CollectionUtils:
:
isAllEmpty
,
list
,
list1
.
iterator
(),
null
,
list2
,
list3
,
map
));
assertTrue
(
CollectionUtils
.
isAllEquals
(
true
,
CollectionUtils:
:
sizeIsEmpty
,
list
,
null
,
list1
.
iterator
(),
jsonArray
,
map
,
array
,
vector
.
elements
()));
Vector
<
Integer
>
vector
=
new
Vector
<>();
// continueFunction 为 null,后续判断到 Iterator。数组排在第一个用于填充上一个元素。
vector
.
add
(
1
);
assertTrue
(
CollectionUtils
.
isAllEquals
(
true
,
null
,
array
,
list1
.
iterator
()));
List
<
Float
>
list4
=
new
ArrayList
<>();
// continueFunction 为 null,后续判断到 Enumeration。Enumeration 排在第一个用于填充上一个元素。
list4
.
add
(
1.0f
);
assertTrue
(
CollectionUtils
.
isAllEquals
(
true
,
null
,
vector
.
elements
(),
list
));
List
<
BigDecimal
>
list5
=
new
ArrayList
<>();
// Iterable 元素不一致结束
list5
.
add
(
new
BigDecimal
(
"1.0"
));
list
.
set
(
0
,
2
);
println
(
"忽略值类型、忽略 null 和空元素和元素为 null:"
+
CollectionUtils
.
isAllEquals
(
true
,
CollectionUtils:
:
isAllEmpty
,
list
,
list1
.
iterator
(),
list2
,
list3
,
list4
,
list5
,
map
,
vector
));
assertFalse
(
CollectionUtils
.
isAllEquals
(
true
,
null
,
list
,
list1
));
// 数组元素不一致结束
array
[
0
]
=
2
;
assertFalse
(
CollectionUtils
.
isAllEquals
(
true
,
null
,
list1
,
array
));
// Enumeration 元素不一致结束
vector
.
set
(
0
,
2
);
assertFalse
(
CollectionUtils
.
isAllEquals
(
true
,
null
,
list1
,
vector
.
elements
()));
// isToString = false
assertFalse
(
CollectionUtils
.
isAllEquals
(
false
,
null
,
list
,
null
));
/** {@link CollectionUtils#isAllEquals(Function, Object...)} */
assertThrows
(
NullPointerException
.
class
,
()
->
CollectionUtils
.
isAllEquals
(
null
,
null
));
assertFalse
(
CollectionUtils
.
isAllEquals
(
null
,
new
ArrayList
<>(),
null
));
}
@DisplayName
(
"是否不满足 每个对象的每个元素都相等"
)
@Test
void
isNotAllEquals
()
{
/** {@link CollectionUtils#isNotAllEquals(boolean, Function, Object...)} */
assertThrows
(
NullPointerException
.
class
,
()
->
CollectionUtils
.
isNotAllEquals
(
true
,
null
,
null
));
List
<
Object
>
list
=
new
ArrayList
<>();
list
.
add
(
1
);
List
<
Object
>
list1
=
new
ArrayList
<>();
list1
.
add
(
2
);
assertTrue
(
CollectionUtils
.
isNotAllEquals
(
true
,
null
,
list
,
list1
));
/** {@link CollectionUtils#isNotAllEquals(Function, Object...)} */
assertThrows
(
NullPointerException
.
class
,
()
->
CollectionUtils
.
isNotAllEquals
(
null
,
null
));
assertTrue
(
CollectionUtils
.
isNotAllEquals
(
null
,
new
ArrayList
<>(),
null
));
}
}
@DisplayName
(
"是否 每个对象的同一位置的元素都相等"
)
@DisplayName
(
"是否 每个对象的同一位置的元素都相等"
)
@Test
@Test
void
isAllEqualsSameIndex
()
{
void
isAllEqualsSameIndex
()
{
/** {@link CollectionUtils#isAllEquals(boolean, Function, Object...)} */
assertThrows
(
NullPointerException
.
class
,
()
->
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
null
,
null
));
assertThrows
(
NullPointerException
.
class
,
()
->
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
null
,
null
));
assertThrows
(
IllegalArgumentException
.
class
,
()
->
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
null
,
new
ArrayList
<>()));
assertThrows
(
IllegalArgumentException
.
class
,
()
->
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
null
,
new
ArrayList
<>()));
...
@@ -128,9 +164,9 @@ public class CollectionUtilsTest {
...
@@ -128,9 +164,9 @@ public class CollectionUtilsTest {
vector
.
add
(
2.0
);
vector
.
add
(
2.0
);
vector
.
add
(
3
);
vector
.
add
(
3
);
assertTrue
(
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
CollectionUtils:
:
sizeIsEmpty
,
list
,
null
,
list1
.
iterator
(),
jsonArray
,
map
,
array
,
vector
.
elements
()));
assertTrue
(
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
CollectionUtils:
:
sizeIsEmpty
,
list
,
null
,
list1
.
iterator
(),
jsonArray
,
map
,
array
,
vector
.
elements
()));
//
非可循环对象且
长度不一致判断结束
// 长度不一致判断结束
list
.
remove
(
2
);
list
.
remove
(
2
);
assertFalse
(
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
null
,
""
,
list
));
assertFalse
(
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
null
,
new
ArrayList
<>()
,
list
));
// 列表元素不一致结束
// 列表元素不一致结束
list
.
add
(
4
);
list
.
add
(
4
);
assertFalse
(
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
null
,
list
,
list1
.
iterator
()));
assertFalse
(
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
null
,
list
,
list1
.
iterator
()));
...
@@ -139,5 +175,30 @@ public class CollectionUtilsTest {
...
@@ -139,5 +175,30 @@ public class CollectionUtilsTest {
// 数组元素不一致结束
// 数组元素不一致结束
array
[
2
]
=
4
;
array
[
2
]
=
4
;
assertFalse
(
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
CollectionUtils:
:
sizeIsEmpty
,
list1
,
array
));
assertFalse
(
CollectionUtils
.
isAllEqualsSameIndex
(
true
,
CollectionUtils:
:
sizeIsEmpty
,
list1
,
array
));
/** {@link CollectionUtils#isAllEquals(Function, Object...)} */
assertThrows
(
NullPointerException
.
class
,
()
->
CollectionUtils
.
isAllEqualsSameIndex
(
null
,
null
));
assertFalse
(
CollectionUtils
.
isAllEqualsSameIndex
(
null
,
new
ArrayList
<>(),
null
));
}
@DisplayName
(
"是否不满足 每个对象的同一位置的元素都相等"
)
@Test
void
isNotAllEqualsSameIndex
()
{
/** {@link CollectionUtils#isNotAllEqualsSameIndex(boolean, Function, Object...)} */
assertThrows
(
NullPointerException
.
class
,
()
->
CollectionUtils
.
isNotAllEqualsSameIndex
(
true
,
null
,
null
));
List
<
Object
>
list
=
new
ArrayList
<>();
list
.
add
(
"1"
);
list
.
add
(
2
);
list
.
add
(
new
BigDecimal
(
"3.0"
));
List
<
Object
>
list1
=
new
ArrayList
<>();
list1
.
add
(
new
BigInteger
(
"1"
));
list1
.
add
(
2.0f
);
list1
.
add
(
3L
);
assertFalse
(
CollectionUtils
.
isNotAllEqualsSameIndex
(
true
,
null
,
list
,
list1
));
/** {@link CollectionUtils#isNotAllEqualsSameIndex(Function, Object...)} */
assertThrows
(
NullPointerException
.
class
,
()
->
CollectionUtils
.
isNotAllEqualsSameIndex
(
null
,
null
));
assertTrue
(
CollectionUtils
.
isNotAllEqualsSameIndex
(
null
,
new
ArrayList
<>(),
null
));
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录