相同的数据行和列合并。请诸位帮帮,万分感谢!
这是原有数据
要合并的数据
- Java code
public class SpecMchnFloorEntity { private Integer mchnId; private Integer floorId; private String stopType; public void setMchnId(Integer mchnId) { this.mchnId = mchnId; } public Integer getMchnId() { return mchnId; } public void setFloorId(Integer floorId) { this.floorId = floorId; } public Integer getFloorId() { return floorId; } public void setStopType(String stopType) { this.stopType = stopType; } public String getStopType() { return stopType; }}- Java code
public class SpecBankFloorEntity { private Integer floorId; private String floorName; private List<SpecMchnFloorEntity> newSpecMchnFloorEntityList; public void setFloorId(Integer floorId) { this.floorId = floorId; } public Integer getFloorId() { return floorId; } public void setFloorName(String floorName) { this.floorName = floorName; } public String getFloorName() { return floorName; } public void setNewSpecMchnFloorEntityList( List<SpecMchnFloorEntity> newSpecMchnFloorEntityList) { this.newSpecMchnFloorEntityList = newSpecMchnFloorEntityList; } public List<SpecMchnFloorEntity> getNewSpecMchnFloorEntityList() { return newSpecMchnFloorEntityList; }}- Java code
public class SpecMchnEntity { private Integer mchnId; private String mchnName; public void setMchnId(Integer mchnId) { this.mchnId = mchnId; } public Integer getMchnId() { return mchnId; } public void setMchnName(String mchnName) { this.mchnName = mchnName; } public String getMchnName() { return mchnName; }}- Java code
import java.util.ArrayList;import java.util.List;public class SpecTest { public static void main(String[] args) { List<SpecMchnEntity> specMchnEntityList = setSpecMchnEntity(); for (SpecMchnEntity specMchnEntity : specMchnEntityList) { System.out.print(" " + specMchnEntity.getMchnName() + " "); } System.out.println(); List<SpecBankFloorEntity> SpecBankFloorEntityList = setSpecMchnFloorEntity(); for (SpecBankFloorEntity specBankFloorEntity : SpecBankFloorEntityList) { List<SpecMchnFloorEntity> specMchnFloorEntityList = specBankFloorEntity.getNewSpecMchnFloorEntityList(); System.out.print(specBankFloorEntity.getFloorName()); for (SpecMchnFloorEntity specMchnFloorEntity : specMchnFloorEntityList) { System.out.print(" " + specMchnFloorEntity.getStopType() + " "); } System.out.println(); } } private static List<SpecMchnEntity> setSpecMchnEntity() { List<SpecMchnEntity> specMchnEntityList = new ArrayList<SpecMchnEntity>(); SpecMchnEntity s = new SpecMchnEntity(); s.setMchnName("01"); specMchnEntityList.add(s); s = new SpecMchnEntity(); s.setMchnName("02"); specMchnEntityList.add(s); s = new SpecMchnEntity(); s.setMchnName("03"); specMchnEntityList.add(s); return specMchnEntityList; } private static List<SpecBankFloorEntity> setSpecMchnFloorEntity() { List<SpecBankFloorEntity> specMchnFloorEntityList = new ArrayList<SpecBankFloorEntity>(); SpecBankFloorEntity sbf = new SpecBankFloorEntity(); sbf.setFloorName("18"); List<SpecMchnFloorEntity> newSpecMchnFloorEntityList = new ArrayList<SpecMchnFloorEntity>(); SpecMchnFloorEntity smf = new SpecMchnFloorEntity(); smf.setStopType("1"); newSpecMchnFloorEntityList.add(smf); smf = new SpecMchnFloorEntity(); smf.setStopType("3"); newSpecMchnFloorEntityList.add(smf); smf = new SpecMchnFloorEntity(); smf.setStopType("4"); newSpecMchnFloorEntityList.add(smf); sbf.setNewSpecMchnFloorEntityList(newSpecMchnFloorEntityList); specMchnFloorEntityList.add(sbf); sbf = new SpecBankFloorEntity(); sbf.setFloorName("17"); newSpecMchnFloorEntityList = new ArrayList<SpecMchnFloorEntity>(); smf = new SpecMchnFloorEntity(); smf.setStopType("2"); newSpecMchnFloorEntityList.add(smf); smf = new SpecMchnFloorEntity(); smf.setStopType("3"); newSpecMchnFloorEntityList.add(smf); smf = new SpecMchnFloorEntity(); smf.setStopType("4"); newSpecMchnFloorEntityList.add(smf); sbf.setNewSpecMchnFloorEntityList(newSpecMchnFloorEntityList); specMchnFloorEntityList.add(sbf); sbf = new SpecBankFloorEntity(); sbf.setFloorName("16"); newSpecMchnFloorEntityList = new ArrayList<SpecMchnFloorEntity>(); smf = new SpecMchnFloorEntity(); smf.setStopType("3"); newSpecMchnFloorEntityList.add(smf); smf = new SpecMchnFloorEntity(); smf.setStopType("3"); newSpecMchnFloorEntityList.add(smf); smf = new SpecMchnFloorEntity(); smf.setStopType("4"); newSpecMchnFloorEntityList.add(smf); sbf.setNewSpecMchnFloorEntityList(newSpecMchnFloorEntityList); specMchnFloorEntityList.add(sbf); sbf = new SpecBankFloorEntity(); sbf.setFloorName("15"); newSpecMchnFloorEntityList = new ArrayList<SpecMchnFloorEntity>(); smf = new SpecMchnFloorEntity(); smf.setStopType("3"); newSpecMchnFloorEntityList.add(smf); smf = new SpecMchnFloorEntity(); smf.setStopType("3"); newSpecMchnFloorEntityList.add(smf); smf = new SpecMchnFloorEntity(); smf.setStopType("4"); newSpecMchnFloorEntityList.add(smf); sbf.setNewSpecMchnFloorEntityList(newSpecMchnFloorEntityList); specMchnFloorEntityList.add(sbf); return specMchnFloorEntityList; }}
小弟算法实在太差,想了一早上也没有想到好的思路。数据已经造好了,还请大家帮帮,谢谢!
[解决办法]
这是什么需求?都用了数据库了,那合并列太容易了,直接distinct就可以,
[解决办法]
回2L,distinct是合并了相同列,LZ要得是合并相邻的相同列,并且把编号累计起来
[解决办法]
我觉得可以实现这样一个数据结构:
1,类似于栈,先进后出
2,每次压栈的时候,如果发现栈顶的元素与将压入的元素相同,则放弃压入,并将列号合并一次,赋给栈顶的元素,如果不同,则先将栈顶元素取出,再进行步骤2
3,每次出栈的元素,放入到队列中,最后一次便利一次就行了
如果不用考虑相邻的关系,用Map,以元素为key,编号为value,每次发现有相同的key,合并value,最后遍历一下就好了。
[解决办法]
先扫描,再显示
1. 每一行放在一个List中
2. 用一个Map存储表示行的List和他对应的夸行数
3. 每一行和上一行进行比较,如果相同,则在Map中存储的行的夸行数加1
4. 显示时从Map中拿出行与它对应的夸行数来显示 (你要想办法保存这些行的顺序)
[解决办法]
恩 用map 存储数据 并判断是否重复 然后记录重复出现的ID
[解决办法]
直接用HashSet不就好了,都不需要做判断的,set中不可能有相同数据的。
[解决办法]
我有个思路:
每一列都单独使用一个List存储所有的数据,用一个List<List>存储整张表,如果记录相同,那么list对象也会相等,用一个if语句判断是否相等,如果相等,则不添加进List<List>
或者可以使用合并的方式,如使用一个Holder类对象存储一个列的所有数据,整张表使用List<Holder>存储。如果记录相同,那么holder类对象也会相等,那么则不添加进List<Holder>
[解决办法]
先合并行,再合并列
4楼和8楼合起来就可以了
[解决办法]
如果是数据库的话,就是GROUP BY,左面第一个字段类似MySQL 的GROUP_CONCAT()
[解决办法]
不行可以硬编码搞定 列数会改变不