有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个与下面非常相似的对象表,每个对象有4列ABCD

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

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

提前谢谢


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 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
    

    嗯,我猜你有一个iterable列表,你有自己的row对象,但是如果你没有,你可能有一个array[]和满是String的过程应该不会有太大的不同

  3. # 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);
                }
        }