【问题标题】:Need to create several smaller tables from one large table [closed]需要从一个大表创建几个小表[关闭]
【发布时间】:2013-09-19 06:02:36
【问题描述】:

我有一个与下面非常相似的对象表,每个对象有 4 列 A,B 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

表 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

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

提前致谢

【问题讨论】:

  • 你试过 2D arraList 吗?

标签: java list


【解决方案1】:

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

【讨论】:

  • 感谢您的回复。我得到了一些你的解释代码,让我的工作更轻松:)
【解决方案2】:

好吧,假设在这个例子中你有一个你自己的类的 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[] 和充满 Strings 的过程不应该有很大的不同.

【讨论】:

  • switch/case 不适用于 JDK 6 及更低版本中的 Strings
  • 如果你不能使用 switch,你可以随时使用if(...){}else if(...){}...else{}
  • 感谢您的回复。我使用的是 java 6。我可以通过 map 实现这一目标
【解决方案3】:
    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);
            }
    }

【讨论】:

  • 非常感谢。你让我的工作变得轻松
猜你喜欢
  • 2019-08-24
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 2021-12-18
  • 2017-08-27
  • 2018-02-26
相关资源
最近更新 更多