Java 需要从一个大表创建几个较小的表
我有一个非常类似于下面的对象表,每个对象有4列Java 需要从一个大表创建几个较小的表,java,list,Java,List,我有一个非常类似于下面的对象表,每个对象有4列a,BC和D 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
a
,B
C
和D
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
实现这一目标的最佳方式是什么
提前感谢最简单的方法是首先制作一张地图,因为您可能正在做作业,这意味着在列表中循环,将每个项目添加到地图中,其中键是b列中的值,然后该值是要添加给定项目的列表。请仔细检查列表是否尚未初始化。然后,您可以在映射中循环并非常轻松地转储每个单独的列表。好吧,在本例中,假设您有自己类的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
ArrayList bigList=new ArrayList();
//插入所有数据
//...
迭代器i=bigList.Iterator();
ArrayList listA=新的ArrayList();
ArrayList listB=新的ArrayList();
ArrayList listC=新的ArrayList();
while(i.hasNext()){
Row now=i.next();
开关(现在是.getColumnB()){
案例“空中购物”:
添加(现在);
打破
案例“可用性”:
列表b.add(现在);
打破
案例“连通性”:
listC.add(现在);
打破
}
}
//在这一点上,你应该有你的清单
我猜你有一个iterable列表,你有自己的row对象,但是如果你没有,你可能有一个数组[]
和一个充满字符串的,这个过程应该不会有太大的不同;
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);
}
}
//将数据添加到列表中
Map Map=newhashmap();
for(对象名o:list)
{
if(map.keySet().contains(o.getB()))
get(o.getB()).add(o);
其他的
{
List temp=new ArrayList();
温度添加(o);
map.put(o.getB(),temp);
}
}
你试过2D arraList吗?开关/case
在JDK 6和更低版本中不能使用字符串
s如果(…){}如果(…){}如果(…){如果(…){其他{}
如果你不能使用开关,你可以随时使用如果(…){如果(…){…其他{}如果你想用多少次,谢谢你的回复。。我正在使用Java6。我用MapThank实现了这一目标。你让我的工作很容易得到回应。我得到了一些你的解释代码,使我的工作更容易:)