已知 数组
String y = "a,b,c,d,e,f,g";
String x = "c,d,e,f";
求:取y与x的差集。。即确定x在y中肯定存在
使用工具类
/**
* @描述 两个数组取差集, 从多的里面取。。。
* @参数 [fids, pids] fids是多的数组;pids是少的数组
* @返回值 java.lang.String
* @创建人 Young
* @创建时间 2019/4/12 20:46
**/
private String getDifSet(String mores, String lesss) {
String[] more = mores.split(",");
String[] less = lesss.split(",");
//将多转换为set fid 肯定不是小的
Set<String> set = new HashSet<String>(Arrays.asList(more));
for (String p : less) {
// 如果集合里有相同的就删掉,如果没有就将值添加到集合
if (set.contains(p)) {
set.remove(p);
} else {
set.add(p);
}
}
return StringUtils.join(set.toArray(), ",");
}
此时只是确定是大小包含的关系。。。
2,如果y中含有x中不存在的元素,那么执行出来的就是不一样了。。
String x = "a,b,c,d,e,f,g";
String y = "c,d,e,f,x,y";
两个合集 减掉 两个并集。
3,如果两个元素不确定是否包含的关系,只想取只在x中存在(即去掉y和x共有 的值 且在x中存在的值)
private static String getDifSet(String mores, String lesss) {
String[] more = mores.split(",");
String[] less = lesss.split(",");
//将多转换为set fid 肯定不是小的
Set<String> set = new HashSet<String>(Arrays.asList(more));
for (String p : less) {
// 如果集合里有相同的就删掉,如果没有就将值添加到集合
if (set.contains(p)) {
set.remove(p);
}
}
return StringUtils.join(set.toArray(), ",");
}
去除添加的else结构。
如果不确定大小的时候。。。
需要先判断哪个是大的集合
1,如果是取两个集合的并集 去除 两个集合的合集,且不确定哪个是大的集合
public static void main(String[] args) {
String x = "a,b,c,m,n";
String y = "a,b,c,d,e,f";
String difSet = getDifSet(x, y);
System.out.println(difSet);
}
/**
* @描述 两个数组取差集, 从多的里面取。。。
* @参数 [fids, pids] fids是多的数组;pids是少的数组
* @返回值 java.lang.String
* @创建人 Young
* @创建时间 2019/4/12 20:46
**/
private static String getDifSet(String mores, String lesss) {
String[] more = mores.split(",");
String[] less = lesss.split(",");
//将多转换为set fid 肯定不是小的
Set<String> set = new HashSet<String>(Arrays.asList(more.length > less.length ? more : less));
for (String p : less.length > more.length ? more:less) {
// 如果集合里有相同的就删掉,如果没有就将值添加到集合
if (set.contains(p)) {
set.remove(p);
}else {
set.add(p);
}
}
return StringUtils.join(set.toArray(), ",");
}
2,如果是取大集合中存在的,且去除 两个集合的并集,并且不知道哪个是大集合和小集合。(该场景应用比较多。。)
public static void main(String[] args) {
String x = "a,b,c";
String y = "a,b,c,d,e,f";
String difSet = getDifSet(x, y);
System.out.println(difSet);
}
private static String getDifSet(String mores, String lesss) {
String[] more = mores.split(",");
String[] less = lesss.split(",");
//将多转换为set fid 肯定不是小的
Set<String> set = new HashSet<String>(Arrays.asList(more.length > less.length ? more : less));
for (String p : less.length > more.length ? more:less) {
// 如果集合里有相同的就删掉,如果没有就将值添加到集合
if (set.contains(p)) {
set.remove(p);
}
}
return StringUtils.join(set.toArray(), ",");
}