add method and test

This commit is contained in:
Looly 2020-05-13 04:58:40 +08:00
parent 0a9b9a6fce
commit c047fd5a23
3 changed files with 71 additions and 2 deletions

View File

@ -3,12 +3,13 @@
-------------------------------------------------------------------------------------------------------------
## 5.3.5 (2020-05-11)
## 5.3.5 (2020-05-13)
### 新特性
* 【core 】 增加CollUtil.map方法
* 【extra 】 增加Sftp.lsEntries方法Ftp和Sftp增加recursiveDownloadFolderpr#121@Gitee
* 【system 】 OshiUtil增加getNetworkIFs方法
* 【core 】 CollUtil增加unionDistinct、unionAll方法pr#122@Gitee
### Bug修复
-------------------------------------------------------------------------------------------------------------

View File

@ -61,10 +61,10 @@ public class MapValueProvider implements ValueProvider<String> {
@Override
public boolean containsKey(String key) {
//检查下划线模式
if(map.containsKey(key)) {
return true;
}else {
//检查下划线模式
return map.containsKey(StrUtil.toUnderlineCase(key));
}
}

View File

@ -144,6 +144,74 @@ public class CollUtil {
return union;
}
/**
* 多个集合的非重复并集类似于SQL中的UNION DISTINCT<br>
* 针对一个集合中存在多个相同元素的情况只保留一个<br>
* 例如集合1[a, b, c, c, c]集合2[a, b, c, c]<br>
* 结果[a, b, c]此结果中只保留了一个c
*
* @param <T> 集合元素类型
* @param coll1 集合1
* @param coll2 集合2
* @param otherColls 其它集合
* @return 并集的集合返回 {@link LinkedHashSet}
*/
@SafeVarargs
public static <T> Set<T> unionDistinct(Collection<T> coll1, Collection<T> coll2, Collection<T>... otherColls) {
final Set<T> result;
if(isEmpty(coll1)){
result = new LinkedHashSet<>();
} else {
result = new LinkedHashSet<>(coll1);
}
if(isNotEmpty(coll2)){
result.addAll(coll2);
}
if(ArrayUtil.isNotEmpty(otherColls)){
for (Collection<T> otherColl : otherColls) {
result.addAll(otherColl);
}
}
return result;
}
/**
* 多个集合的完全并集类似于SQL中的UNION ALL<br>
* 针对一个集合中存在多个相同元素的情况保留全部元素<br>
* 例如集合1[a, b, c, c, c]集合2[a, b, c, c]<br>
* 结果[a, b, c, c, c, a, b, c, c]
*
* @param <T> 集合元素类型
* @param coll1 集合1
* @param coll2 集合2
* @param otherColls 其它集合
* @return 并集的集合返回 {@link ArrayList}
*/
@SafeVarargs
public static <T> List<T> unionAll(Collection<T> coll1, Collection<T> coll2, Collection<T>... otherColls) {
final List<T> result;
if(isEmpty(coll1)){
result = new ArrayList<>();
} else {
result = new ArrayList<>(coll1);
}
if(isNotEmpty(coll2)){
result.addAll(coll2);
}
if(ArrayUtil.isNotEmpty(otherColls)){
for (Collection<T> otherColl : otherColls) {
result.addAll(otherColl);
}
}
return result;
}
/**
* 两个集合的交集<br>
* 针对一个集合中存在多个相同元素的情况计算两个集合中此元素的个数保留最少的个数<br>