这应该解决你的用例.它可以以更有效的方式实现,但我想这应该给你一个开始的想法:

private static Collection> mergeIntersections(Collection> collection) {

Collection> processedCollection = mergeIntersectionsInternal(collection);

while (!isMergedSuccessfully(processedCollection)) {

processedCollection = mergeIntersectionsInternal(processedCollection);

}

return processedCollection;

}

private static boolean isMergedSuccessfully(Collection> processedCollection) {

if (processedCollection.size() <= 1) {

return true;

}

final Set mergedNumbers = new HashSet<>();

int totalNumbers = 0;

for (Set set : processedCollection) {

totalNumbers += set.size();

mergedNumbers.addAll(set);

}

if (totalNumbers > mergedNumbers.size()) {

return false;

}

return true;

}

private static Collection> mergeIntersectionsInternal(Collection> collection) {

final Collection> processedCollection = new ArrayList<>();

// ITERATE OVER ALL SETS

for (final Set numberSet : collection) {

for (final Integer number : numberSet) {

boolean matched = false;

// ITERATE OVER ALL PROCESSED SETS COLLECTION

for (final Set processedSet : processedCollection) {

// CHECK OF THERE IS A MATCH

if (processedSet.contains(number)) {

matched = true;

// MATCH FOUND, MERGE THE SETS

processedSet.addAll(numberSet);

// BREAK OUT OF PROCESSED COLLECTION LOOP

break;

}

}

// IF NOT MATCHED THEN ADD AS A COLLECTION ITEM

if (!matched) {

processedCollection.add(new HashSet<>(numberSet));

}

}

}

return processedCollection;

}

这是它执行它的方式:

public static void main(String[] args) {

final Collection> collection = new ArrayList<>();

final Set set1 = new HashSet<>();

set1.add(1);

set1.add(2);

set1.add(3);

collection.add(set1);

final Set set2 = new HashSet<>();

set2.add(4);

collection.add(set2);

final Set set3 = new HashSet<>();

set3.add(1);

set3.add(5);

collection.add(set3);

final Set set4 = new HashSet<>();

set4.add(4);

set4.add(7);

collection.add(set4);

final Set set5 = new HashSet<>();

set5.add(3);

set5.add(5);

collection.add(set5);

System.out.println(mergeIntersections(collection));

}

java过滤集合,java – 如何通过交集过滤集合集合?相关推荐

  1. java list过滤完赋给自己_Java8对list集合进行排序、过滤、分组、去重、转map、遍历赋值等操作...

    importlombok.Data;import java.util.*;importjava.util.stream.Collectors;public classTestMain {//测试集合 ...

  2. 集算器协助Java处理结构化文本之条件过滤

    直接用Java实现文本文件中数据按条件过滤会有如下的麻烦: 1.文件不是数据库,不能用SQL访问.当过滤条件变化时需要改写代码.如果要实现象SQL那样灵活的条件过滤,则需要自己实现动态表达式解析和求值 ...

  3. java使用DFA算法实现敏感词过滤

    Java使用DFA算法实现敏感词过滤 DFA,全称 Deterministic Finite Automaton 即确定有穷自动机. 其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每 ...

  4. java正则表示过滤汉字,Java正则表达式过滤汉字

    String str = "hello你好吗,我很好 thank you"; String reg = "[\u2E80-\u9FFF]"; Pattern p ...

  5. 【转】【异常处理】Incorrect string value: ‘\xF0\x90\x8D\x83...‘ for column... Emoji表情字符过滤的Java实现

    [转][异常处理]Incorrect string value: '\xF0\x90\x8D\x83...' for column... Emoji表情字符过滤的Java实现 参考文章: (1)[转] ...

  6. java计算机毕业设计基于ssm的协同过滤算法的电影推荐系统(源代码+数据库+Lw文档)

    项目介绍 "互联网+"的战略实施后,很多行业的信息化水平都有了很大的提升.但是目前很多行业的管理仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人 ...

  7. Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类

    Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类 =========================== ©Copyright 蕃薯耀 2017年9月22日 http://fansh ...

  8. 【java】java sftp访问文件夹,java smb访问共享文件夹 按时间过滤查找文件 集成springboot

    文章目录 java的sftp传输 sftp按时间过滤文件列表 sftp注意事项 java smb1.0传输 smb1.0按时间过滤文件列表 smb注意事项 java smb2.0/3.0传输(smbj ...

  9. java 交集_Java大集合求交集的方法比较

    两个List集合求交集想必学过Java的都知道用系统自带的retainAll()方法,但是在数据量比较大时,这个方法效率并不高,利用空余时间研究了几种数据量较大时求两个集合交集的办法.本文主要研究了J ...

  10. java文件上传过滤,struts2中文件上传过滤

    手动实现文件过滤 大部分时候,Web应用不允许浏览者自由上传,尤其不能允许上传可执行性文件--因为可能是病毒程序.通常,我们可以允许浏览者上传图片,上传压缩文件等:除此之外,还必须对浏览者上传的文件大 ...

最新文章

  1. 【分享】WeX5的正确打开方式(1)
  2. ES6学习(var,let,const区别)
  3. 51CTO首页改版上线 欢迎大家拍砖!
  4. java 面向对象多态_乐字节Java面向对象三大特性以及Java多态
  5. ffmpeg命令_温故知新:ffmpeg操作《天空之城》。窗口党勿入,都是指令!
  6. java 泛型的问题_java 泛型问题?
  7. Pandas Learning
  8. 怎样在计算机桌面上安装驱动器,怎么用韩博士驱动助理安装电脑驱动
  9. linux+ipv6免流量下载,Ubuntu 12.04 校园网下使用IPv6源 免流量更新
  10. 计算机网络实用技术教程txt,计算机网络实用技术教程
  11. Unity C#编程优化——枚举
  12. 云e办学习笔记(十五)Redis学习以及相关部署
  13. 屏蔽第三方SDK权限
  14. vue添加背景及页面留白处理方法
  15. 微信小程序怎么安装使用WeUI组件
  16. 图表嵌入到数据表格下方_在excel图表下方添加数据表 excel图表添加数据表
  17. 计算机软件从业证书,互联网行业从业人员证书
  18. word导出数据(tp5)
  19. Android 9.0 GMS 桌面布局修改
  20. 数据分析笔记--matplotlib(五)绘制条形图

热门文章

  1. HDU2516 取石子游戏(斐波那契)
  2. AssetPostprocessor.OnPreprocessModel
  3. 第五节、矩阵分解之LU分解
  4. JavaScript之阻止事件冒泡。
  5. .NET 漫淡(一) --- 需要充分认识的应用程序域-AppDomain
  6. ASP.NET动态加载用户控件的页面生成过程
  7. php使用referer,PHP利用REFERER根居访问来地址进行页面跳转
  8. 拓端tecdat|R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据
  9. 拓端tecdat|R语言广义相加模型 (GAMs)分析预测CO2时间序列数据
  10. python-enurmate