一、取交集、并集、差集
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Alan Chen
* @description
* @date 2021/8/11
*/
public class Test {
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("5");
list1.add("6");
List<String> list2 = new ArrayList<String>();
list2.add("2");
list2.add("3");
list2.add("7");
list2.add("8");
// 交集
List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());
System.out.println("---交集 intersection---");
intersection.parallelStream().forEach(System.out :: println);
// 差集 (list1 - list2)
List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
System.out.println("---差集 reduce1 (list1 - list2)---");
reduce1.parallelStream().forEach(System.out :: println);
// 差集 (list2 - list1)
List<String> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(Collectors.toList());
System.out.println("---差集 reduce2 (list2 - list1)---");
reduce2.parallelStream().forEach(System.out :: println);
// 并集
List<String> listAll = list1.parallelStream().collect(Collectors.toList());
List<String> listAll2 = list2.parallelStream().collect(Collectors.toList());
listAll.addAll(listAll2);
System.out.println("---并集 listAll---");
listAll.parallelStream().forEachOrdered(System.out :: println);
// 去重并集
List<String> listAllDistinct = listAll.stream().distinct().collect(Collectors.toList());
System.out.println("---得到去重并集 listAllDistinct---");
listAllDistinct.parallelStream().forEachOrdered(System.out :: println);
System.out.println("---原来的List1---");
list1.parallelStream().forEachOrdered(System.out :: println);
System.out.println("---原来的List2---");
list2.parallelStream().forEachOrdered(System.out :: println);
}
}
二、差集去重 & 不去重
public class Client {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("a");
List<String> list2 = new ArrayList<>();
list2.add("a");
//a
List<String> list3 = minus(list1, list2);
for (String item : list3) {
System.out.println(item);
}
}
/**
* 集合差集:去重
*
* @param list1
* @param list2
* @return
*/
private static List<String> minus2(List<String> list1, List<String> list2) {
return list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
}
/**
* 集合差集:不去重
*
* @param list1
* @param list2
* @return
*/
private static List<String> minus(List<String> list1, List<String> list2) {
if (CollectionUtil.isEmpty(list1) || CollectionUtil.isEmpty(list2)) {
return list1;
}
List<String> newList = list1.stream().collect(Collectors.toList());
for (String target : list2) {
Optional<String> opt = newList.stream().filter(item -> item.equals(target)).findFirst();
if (opt.isPresent()) {
int firstIndex = newList.indexOf(target);
newList.remove(firstIndex);
}
}
return newList;
}
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。