合并规则:删除家长phone为空的记录,若一个家长对应多个孩子,保留一条家长记录,家长id修改为phone,对应关系也要修改。
代码如下:
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; public class 测试合并_S3_Test { public static void main(String[] args) { 测试合并_S3_Test t = new 测试合并_S3_Test(); t.testMergeData(); } /** * @Description: 删除家长phone为空的记录,若一个家长对应多个孩子,保留一条家长记录,家长id修改为phone,对应关系也要修改 */ public void testMergeData() { List<Map<String, String>> parentList = getMockParentInfoList(); List<Map<String, String>> childList = getMockChildInfoList(); List<Map<String, String>> relaList = getMockRelaInfoList(); System.out.println("----------------合并前------------------"); System.out.println("----------------家长------------------"); for (Map<String, String> parentMap : parentList) { System.out.println(parentMap); } System.out.println("----------------孩子------------------"); for (Map<String, String> childMap : childList) { System.out.println(childMap); } System.out.println("----------------对应关系------------------"); for (Map<String, String> relaMap : relaList) { System.out.println(relaMap); } if (parentList == null || parentList.size() == 0 || childList == null || childList.size() == 0 || relaList == null || relaList.size() == 0) { return; } /** * 按电话号码排序 */ Collections.sort(parentList, new Comparator<Map<String, String>>() { public int compare(Map<String, String> m1, Map<String, String> m2) { return m1.get("phone").compareTo(m2.get("phone")); } }); /** * 找到电话号码相同的家长id并删除电话号码相同的家长 */ Iterator<Map<String, String>> pit = parentList.iterator(); Map<String, List<String>> idMap = new HashMap<String, List<String>>(); List<String> delList = new ArrayList<String>(); boolean isFirst = true; String firstPhone = null, firstId = null; while (pit.hasNext()) { Map<String, String> ptMap = pit.next(); if (StringUtils.isBlank(ptMap.get("phone"))) { delList.add(ptMap.get("id")); pit.remove(); continue; } if (isFirst) { isFirst = false; firstPhone = ptMap.get("phone"); firstId = ptMap.get("id"); } else { if (firstPhone.equals(ptMap.get("phone"))) { if (idMap.containsKey(firstPhone)) { List<String> idList = idMap.get(firstPhone); idList.add(ptMap.get("id")); } else { List<String> idList = new ArrayList<String>(); idList.add(firstId); idList.add(ptMap.get("id")); idMap.put(firstPhone, idList); } pit.remove(); } else { firstPhone = ptMap.get("phone"); firstId = ptMap.get("id"); } } } /** * 删除phone为空的记录 */ List<String> childDelList = new ArrayList<String>(); pit = relaList.iterator(); while (pit.hasNext()) { Map<String, String> relaMap = pit.next(); if (delList.contains(relaMap.get("parentId"))) { childDelList.add(relaMap.get("childId")); pit.remove(); } } pit = childList.iterator(); while (pit.hasNext()) { Map<String, String> childMap = pit.next(); if (childDelList.contains(childMap.get("id"))) { pit.remove(); } } System.out.println("----=" + childList.size()); /** * 修改id为phone */ pit = parentList.iterator(); while (pit.hasNext()) { Map<String, String> ptMap = pit.next(); if (idMap.containsKey(ptMap.get("phone"))) { List<String> idList = idMap.get(ptMap.get("phone")); String phone = ptMap.get("phone"); Iterator<Map<String, String>> relaIt = relaList.iterator(); while (relaIt.hasNext()) { Map<String, String> relaMap = relaIt.next(); if (idList.contains(relaMap.get("parentId"))) { relaMap.put("parentId", phone); } } ptMap.put("id", phone); } } System.out.println("----------------合并后------------------"); System.out.println("----------------家长------------------"); for (Map<String, String> parentMap : parentList) { System.out.println(parentMap); } System.out.println("----------------孩子------------------"); for (Map<String, String> childMap : childList) { System.out.println(childMap); } System.out.println("----------------对应关系------------------"); for (Map<String, String> relaMap : relaList) { System.out.println(relaMap); } } public List<Map<String, String>> getMockParentInfoList() { List<Map<String, String>> parentInfoList = new ArrayList<Map<String, String>>(); Map<String, String> parantInfo = new HashMap<String, String>(); parantInfo.put("id", "123"); parantInfo.put("name", "家长1"); parantInfo.put("account", "4"); parantInfo.put("password", "123"); parantInfo.put("type", "3"); parantInfo.put("phone", "134566666"); parantInfo.put("province", "_省_1"); parantInfo.put("city", "_市_1"); parantInfo.put("userStatus", "1"); parantInfo.put("sex", "1"); parentInfoList.add(parantInfo); Map<String, String> parantInfo2 = new HashMap<String, String>(); parantInfo2.put("id", "125"); parantInfo2.put("name", "家长3"); parantInfo2.put("account", "42"); parantInfo2.put("password", "123"); parantInfo2.put("type", "3"); parantInfo2.put("phone", "134566667"); parantInfo2.put("province", "_省_2"); parantInfo2.put("city", "_市_2"); parantInfo2.put("userStatus", "1"); parantInfo2.put("sex", "1"); parentInfoList.add(parantInfo2); parantInfo2 = new HashMap<String, String>(); parantInfo2.put("id", "129"); parantInfo2.put("name", "家长5"); parantInfo2.put("account", "43"); parantInfo2.put("password", "123"); parantInfo2.put("type", "3"); parantInfo2.put("phone", "134566668"); parantInfo2.put("province", "_省_3"); parantInfo2.put("city", "_市_3"); parantInfo2.put("userStatus", "1"); parantInfo2.put("sex", "1"); parentInfoList.add(parantInfo2); parantInfo2 = new HashMap<String, String>(); parantInfo2.put("id", "130"); parantInfo2.put("name", "家长6"); parantInfo2.put("account", "44"); parantInfo2.put("password", "123"); parantInfo2.put("type", "3"); parantInfo2.put("phone", " "); parantInfo2.put("province", "_省_4"); parantInfo2.put("city", "_市_4"); parantInfo2.put("userStatus", "1"); parantInfo2.put("sex", "1"); parentInfoList.add(parantInfo2); parantInfo2 = new HashMap<String, String>(); parantInfo2.put("id", "124"); parantInfo2.put("name", "家长2"); parantInfo2.put("account", "45"); parantInfo2.put("password", "123"); parantInfo2.put("type", "3"); parantInfo2.put("phone", "134566666"); parantInfo2.put("province", "_省_5"); parantInfo2.put("city", "_市_5"); parantInfo2.put("userStatus", "1"); parantInfo2.put("sex", "1"); parentInfoList.add(parantInfo2); parantInfo2 = new HashMap<String, String>(); parantInfo2.put("id", "128"); parantInfo2.put("name", "家长4"); parantInfo2.put("account", "46"); parantInfo2.put("password", "123"); parantInfo2.put("type", "3"); parantInfo2.put("phone", "134566668"); parantInfo2.put("province", "_省_6"); parantInfo2.put("city", "_市_6"); parantInfo2.put("userStatus", "1"); parantInfo2.put("sex", "1"); parentInfoList.add(parantInfo2); return parentInfoList; } public List<Map<String, String>> getMockChildInfoList() { List<Map<String, String>> childrenInfoList = new ArrayList<Map<String, String>>(); Map<String, String> childInfo = new HashMap<String, String>(); childInfo.put("id", "123"); childInfo.put("name", "孩子1"); childInfo.put("account", "47"); childInfo.put("password", "123"); childInfo.put("type", "2"); childInfo.put("province", "_省_1"); childInfo.put("city", "_市_1"); childInfo.put("userStatus", "1"); childInfo.put("sex", "1"); childrenInfoList.add(childInfo); Map<String, String> childInfo2 = new HashMap<String, String>(); childInfo2.put("id", "125"); childInfo2.put("name", "孩子2"); childInfo2.put("account", "48"); childInfo2.put("password", "123"); childInfo2.put("type", "2"); childInfo2.put("province", "_省_2"); childInfo2.put("city", "_市_2"); childInfo2.put("userStatus", "1"); childInfo2.put("sex", "1"); childrenInfoList.add(childInfo2); childInfo2 = new HashMap<String, String>(); childInfo2.put("id", "131"); childInfo2.put("name", "孩子6"); childInfo2.put("account", "49"); childInfo2.put("password", "123"); childInfo2.put("type", "2"); childInfo2.put("province", "_省_3"); childInfo2.put("city", "_市_3"); childInfo2.put("userStatus", "1"); childInfo2.put("sex", "1"); childrenInfoList.add(childInfo2); childInfo2 = new HashMap<String, String>(); childInfo2.put("id", "129"); childInfo2.put("name", "孩子5"); childInfo2.put("account", "50"); childInfo2.put("password", "123"); childInfo2.put("type", "2"); childInfo2.put("province", "_省_4"); childInfo2.put("city", "_市_4"); childInfo2.put("userStatus", "1"); childInfo2.put("sex", "1"); childrenInfoList.add(childInfo2); childInfo2 = new HashMap<String, String>(); childInfo2.put("id", "126"); childInfo2.put("name", "孩子3"); childInfo2.put("account", "51"); childInfo2.put("password", "123"); childInfo2.put("type", "2"); childInfo2.put("province", "_省_5"); childInfo2.put("city", "_市_5"); childInfo2.put("userStatus", "1"); childInfo2.put("sex", "1"); childrenInfoList.add(childInfo2); childInfo2 = new HashMap<String, String>(); childInfo2.put("id", "128"); childInfo2.put("name", "孩子4"); childInfo2.put("account", "52"); childInfo2.put("password", "123"); childInfo2.put("type", "2"); childInfo2.put("province", "_省_6"); childInfo2.put("city", "_市_6"); childInfo2.put("userStatus", "1"); childInfo2.put("sex", "1"); childrenInfoList.add(childInfo2); return childrenInfoList; } public List<Map<String, String>> getMockRelaInfoList() { List<Map<String, String>> relaInfoList = new ArrayList<Map<String, String>>(); Map<String, String> relaMap = new HashMap<String, String>(); relaMap.put("parentId", "123"); relaMap.put("childId", "123"); relaInfoList.add(relaMap); relaMap = new HashMap<String, String>(); relaMap.put("parentId", "130"); relaMap.put("childId", "131"); relaInfoList.add(relaMap); relaMap = new HashMap<String, String>(); relaMap.put("parentId", "124"); relaMap.put("childId", "125"); relaInfoList.add(relaMap); relaMap = new HashMap<String, String>(); relaMap.put("parentId", "125"); relaMap.put("childId", "126"); relaInfoList.add(relaMap); relaMap = new HashMap<String, String>(); relaMap.put("parentId", "128"); relaMap.put("childId", "128"); relaInfoList.add(relaMap); relaMap = new HashMap<String, String>(); relaMap.put("parentId", "129"); relaMap.put("childId", "129"); relaInfoList.add(relaMap); return relaInfoList; } }
结果为:
----------------合并前------------------ ----------------家长------------------ {password=123, userStatus=1, province=_省_1, phone=134566666, city=_市_1, sex=1, name=家长1, id=123, type=3, account=4} {password=123, userStatus=1, province=_省_2, phone=134566667, city=_市_2, sex=1, name=家长3, id=125, type=3, account=42} {password=123, userStatus=1, province=_省_3, phone=134566668, city=_市_3, sex=1, name=家长5, id=129, type=3, account=43} {password=123, userStatus=1, province=_省_4, phone= , city=_市_4, sex=1, name=家长6, id=130, type=3, account=44} {password=123, userStatus=1, province=_省_5, phone=134566666, city=_市_5, sex=1, name=家长2, id=124, type=3, account=45} {password=123, userStatus=1, province=_省_6, phone=134566668, city=_市_6, sex=1, name=家长4, id=128, type=3, account=46} ----------------孩子------------------ {password=123, userStatus=1, province=_省_1, city=_市_1, sex=1, name=孩子1, id=123, type=2, account=47} {password=123, userStatus=1, province=_省_2, city=_市_2, sex=1, name=孩子2, id=125, type=2, account=48} {password=123, userStatus=1, province=_省_3, city=_市_3, sex=1, name=孩子6, id=131, type=2, account=49} {password=123, userStatus=1, province=_省_4, city=_市_4, sex=1, name=孩子5, id=129, type=2, account=50} {password=123, userStatus=1, province=_省_5, city=_市_5, sex=1, name=孩子3, id=126, type=2, account=51} {password=123, userStatus=1, province=_省_6, city=_市_6, sex=1, name=孩子4, id=128, type=2, account=52} ----------------对应关系------------------ {childId=123, parentId=123} {childId=131, parentId=130} {childId=125, parentId=124} {childId=126, parentId=125} {childId=128, parentId=128} {childId=129, parentId=129} ----=5 ----------------合并后------------------ ----------------家长------------------ {password=123, userStatus=1, province=_省_1, phone=134566666, city=_市_1, sex=1, name=家长1, id=134566666, type=3, account=4} {password=123, userStatus=1, province=_省_2, phone=134566667, city=_市_2, sex=1, name=家长3, id=125, type=3, account=42} {password=123, userStatus=1, province=_省_3, phone=134566668, city=_市_3, sex=1, name=家长5, id=134566668, type=3, account=43} ----------------孩子------------------ {password=123, userStatus=1, province=_省_1, city=_市_1, sex=1, name=孩子1, id=123, type=2, account=47} {password=123, userStatus=1, province=_省_2, city=_市_2, sex=1, name=孩子2, id=125, type=2, account=48} {password=123, userStatus=1, province=_省_4, city=_市_4, sex=1, name=孩子5, id=129, type=2, account=50} {password=123, userStatus=1, province=_省_5, city=_市_5, sex=1, name=孩子3, id=126, type=2, account=51} {password=123, userStatus=1, province=_省_6, city=_市_6, sex=1, name=孩子4, id=128, type=2, account=52} ----------------对应关系------------------ {childId=123, parentId=134566666} {childId=125, parentId=134566666} {childId=126, parentId=125} {childId=128, parentId=134566668} {childId=129, parentId=134566668}
全文完。
相关推荐
以下是一些非常实用的PHP代码片段,它们分别用于创建数据URI、合并CSS和JavaScript文件、检查文件是否可写、获取HTML文档中的所有链接、自动将URL转换为超链接以及检查文件是否安全可读。 1. **创建数据URI** 数据...
这里有一个小错误,提到sess无用,实际上可能是指在当前代码片段中sess变量未被使用。 - 图片路径列表生成:通过glob模块,搜索特定目录下的bmp文件,以形成图片路径列表。 - 预处理图片:选取一张图片作为样本...
以上代码片段只是一个示例,实际应用中需要根据具体业务逻辑调整。在`AnalysisEventListener`的`invoke`方法中,你可以获取到当前行数据,并与前一行进行比较。如果满足合并条件,可以利用`AnalysisContext`的`...
在现代网络通信中,GMII (Gigabit Media Independent Interface) 和 RGMII (Reduced Gigabit Media Independent Interface) 是两种...在实际工程应用中,这样的代码片段可以作为一个模块被复用,以满足不同项目的需求。
通过上述代码片段,我们可以看到在DataGridView中实现单元格合并的过程不仅涉及到逻辑判断,还涉及到精细的绘图操作。正确的实现能够极大地提升数据展示的效果,使用户界面更加友好和直观。然而,这也意味着开发者...
以下是一些可能的关键代码片段: ```csharp // 创建一个新的DataGridView实例 DataGridView dgv = new DataGridView(); // 隐藏行标头以实现跨行合并 dgv.RowHeadersVisible = false; // 设置单元格合并 for (int...
"lecture05_codes"可能包含创建图表和报告的代码片段。 6. 大数据工具与平台:除了Hadoop和Spark,还有其他大数据工具如Hive(SQL-like查询大数据的工具)、HBase(NoSQL数据库)、Kafka(消息队列)等,它们共同...
从提供的【部分内容】来看,文档中包含了一些编程代码片段,这些代码可能是用C++语言编写的,用于说明如何实现字符串合并。代码中出现了一些典型的数据结构,如数组(例如Sl和S2),以及循环结构(例如for循环),...
虽然给定的代码片段提供了一个基本的行合并解决方案,但在实际应用中,我们可能还需要考虑以下几点: 1. **多列合并**:除了基于单列进行合并外,还可以根据多列的组合值来决定行的合并,这需要对代码进行相应的...
本文将深入解析提供的三个非常有用的PHP代码片段,它们可以帮助优化网页性能,跟踪邮件阅读状态,以及简化文件合并过程。 1. **创建数据URI** 数据URI是一种在HTML、CSS或JavaScript中内联表示资源的方法,它可以...
为了进行数据分析或创建综合报告,需要将这些数据合并到一个工作表中。VBA提供了一种自动执行此操作的方法,避免了手动复制粘贴的繁琐和潜在错误。 #### 2. **代码解读** 首先,让我们来详细分析提供的VBA代码片段...
根据提供的代码片段,我们可以看到一个名为`getExcelAsFile`的方法,该方法接受一个文件路径作为参数,然后使用Apache POI来读取Excel文件,并将数据存储到`List<StuEntity>`中。 1. **文件读取**: ```java ...
数据集融合,又称为数据合并或聚合,是GIS中的一个重要概念,用于将具有相同空间参考系统的多个地理要素层合并成一个新的单一数据集。在地理信息处理中,这通常用于消除边界重叠,统计区域属性,或者简化复杂的地理...
1. PHP文件合并函数:在提供的代码片段中,`combine_my_files` 函数用于合并多个JavaScript或CSS文件到一个文件中。这个功能有助于优化网站性能,减少HTTP请求,提高页面加载速度。它首先检查目标文件是否存在,如果...
在Excel VBA编程中,"合并相同项目"通常是指通过编写宏代码来处理大量数据,自动查找并合并具有相同属性的记录。这个过程对于数据整理和分析尤其...同时,也可以借鉴和参考其中的代码片段,为自己的VBA项目提供灵感。
下面是一个简单的代码片段,演示了如何替换占位符: ```java FileInputStream fis = new FileInputStream("template.docx"); XWPFDocument document = new XWPFDocument(fis); for (XWPFParagraph paragraph : ...
以下代码片段展示了如何在GridView控件中创建一个包含两个行的表头,并且对部分列进行了合并。 #### 三、具体实现代码详解 1. **判断创建的行是否为表头行** ```csharp if (e.Row.RowType == ...
以上代码片段展示了如何使用gdal库读取和合并多波段数据,但实际的合并过程需要根据具体需求实现,例如,可以逐波段读取数据并堆叠到一个大的numpy数组中,然后使用gdal的WriteArray方法将结果写入新的GeoTIFF文件。...
以上代码片段提供了一个基本框架,但实际的合并操作和数据结构的更新需要根据具体问题进行详细设计。贪心算法虽然不能保证所有情况下都能得到全局最优解,但在最优合并问题这种特定情况下,它可以有效地解决问题,...
【标题】中的“9个常用的PHP代码片段编程小技巧共7页.pdf.zip”指的是一个包含九个实用PHP编程技巧的压缩文件,共有七页内容。这个文件可能是某个教程或者参考资料,旨在帮助PHP开发者提高编程效率,解决实际问题。 ...