需要从一个大表创建几个较小的表

时间:2013-09-19 06:02:37

标签: java list

我有一个与下面非常类似的对象表,每个对象有4列AB CD

A        B               C              D
---------------------------------------------------
Jan-13  AIR SHOPPING    TPF SCIPS   61
Feb-13  AIR SHOPPING    TPF SCIPS   81
Mar-13  AIR SHOPPING    TPF SCIPS   147
Jan-13  AVAILABILITY    TPF SCIPS   17007
Feb-13  AVAILABILITY    TPF SCIPS   1845
Mar-13  AVAILABILITY    TPF SCIPS   2297 
Jan-13  CONNECTIVITY    TPF SCIPS   1240
Feb-13  CONNECTIVITY    TPF SCIPS   1080
Mar-13  CONNECTIVITY    TPF SCIPS   1864

从上表我需要基于列B创建不同的表。即我需要创建具有相同列B值的对象表。最后,对于上表,我需要创建3个不同的表。

表1

A        B               C              D
---------------------------------------------------
Jan-13  AIR SHOPPING    TPF SCIPS   61
Feb-13  AIR SHOPPING    TPF SCIPS   81
Mar-13  AIR SHOPPING    TPF SCIPS   147

table-2

A        B               C              D
---------------------------------------------------
Jan-13  AVAILABILITY    TPF SCIPS   17007
Feb-13  AVAILABILITY    TPF SCIPS   1845
Mar-13  AVAILABILITY    TPF SCIPS   2297 

表3

A        B               C              D
---------------------------------------------------
Jan-13  CONNECTIVITY    TPF SCIPS   1240
Feb-13  CONNECTIVITY    TPF SCIPS   1080
Mar-13  CONNECTIVITY    TPF SCIPS   1864

实现这一目标的最佳方法是什么?

提前致谢

3 个答案:

答案 0 :(得分:2)

最简单的方法是首先制作地图,因为你可能正在做一个分配,这意味着循环遍历列表,将每个项目添加到地图中,其中键是列b中的值,然后是值是要添加给定项目的列表。小心检查列表是否尚未初始化。然后,您可以循环遍历地图并轻松转储每个列表。

答案 1 :(得分:0)

嗯,猜测在这个例子中你有一个你自己的类的ArrayList(我们称之为Row),我会这样做:

ArrayList<Row> bigList = new ArrayList<Row>();
//Insert all data
//...
Iterator i = bigList.iterator();
ArrayList<Row> listA = new ArrayList<Row>();
ArrayList<Row> listB = new ArrayList<Row>();
ArrayList<Row> listC = new ArrayList<Row>();
while(i.hasNext()){
  Row now = i.next();
  switch(now.getColumnB()){
    case "AIR SHOPPING":
      listA.add(now);
      break;
    case "AVAILABILITY":
      listB.add(now);
      break;
    case "CONNECTIVITY":
      listC.add(now);
      break;
  }
}
//And at this point you should have your lists

好吧,我猜你有一个可迭代的列表并且你有自己的行对象,但是如果你没有,你可能有一个array[]并且有String个过程就不应该'与众不同。

答案 2 :(得分:0)

    List<Objname> list=new ArrayList<>();
    //add data to list

    Map<String,List<Objname>> map=new HashMap<>(); 

    for(Objname o:list)
    {
            if(map.keySet().contains(o.getB()))
                map.get(o.getB()).add(o);
            else
            {
                List<Objname> temp=new ArrayList<Objname>();
                temp.add(o);
                map.put(o.getB(),temp);
            }
    }