首页 新闻 会员 周边 捐助

java 集合里的元素是集合,怎么遍历里面的集合?

0
悬赏园豆:50 [已解决问题] 解决于 2016-01-28 10:46
List list = new ArrayList();
List<User> userList = new ArrayList();//用于接收从数据库查出的数据
List<Department> dpList = new ArrayList();//用于接收从数据库查出的数据
list.add(userList);
list.add(dpList);
需要将list传到另个方法里
怎么用list遍历userList和dpList?
阿_坤的主页 阿_坤 | 初学一级 | 园豆:98
提问于:2016-01-27 10:31
< >
分享
最佳答案
0

怎么遍历list 就怎么遍历 userList

收获园豆:45
_Arnold | 小虾三级 |园豆:635 | 2016-01-27 10:42

那样得不到userList的属性

阿_坤 | 园豆:98 (初学一级) | 2016-01-27 10:44

和方法

阿_坤 | 园豆:98 (初学一级) | 2016-01-27 10:44

@丨akun丨: 

你说的是得不到User 的属性吧   ,你把遍历到的userList对象   如:  userList[0]  转换为User对象就好了 

c#  中可以这样  :

User user =  (User)userList[0] ;

再去访问user对象中的属性

或者  这样访问

((User)userList[0] ) .Name  

 

1 User user  = (User)userList[0];
2 
3 string name = ((User)userList[0]).Name;

 

_Arnold | 园豆:635 (小虾三级) | 2016-01-27 10:48

@xiaoxiao刀: 是可以的,但是我怎么把 (User)userList[0] ;中的(User)传过去呢?而且与集合一一对应,我这边不止这两个model,总共十几个

阿_坤 | 园豆:98 (初学一级) | 2016-01-27 11:05

@丨akun丨: 

不知道你这边的具体需求是什么样的,

如果在函数中你不知道对象是哪种类型的话  

可以  

Type type = userList[0].GetType();

if(type is User)

{

User user = (type)userList[0];

}
_Arnold | 园豆:635 (小虾三级) | 2016-01-27 11:13

@丨akun丨: 

不过这样做,可能效率会很低, 你把你逻辑需求贴出来,这种多维数组的方式,是不推荐这么用的,得视情况而定

_Arnold | 园豆:635 (小虾三级) | 2016-01-27 11:26

@xiaoxiao刀: 我这边是做报表,一个报表了包含了十几个小表,也就是说我需要从十几个model里取数据,而数据处理与报表导出是在两个方法里,所以只能把十几个model放到一个集合里,再把这个集合传到报表导出的方法里。

阿_坤 | 园豆:98 (初学一级) | 2016-01-27 11:45

@丨akun丨: 

你报表导出的方法不能改是么,既然数据量这么大,肯定是把多个表分步加载呀,没必要一次性都弄出来呀,另外你用的是ORM?

_Arnold | 园豆:635 (小虾三级) | 2016-01-27 11:53

@xiaoxiao刀: 怎么分步加载呢?我用的是POI,报表是导出excel

阿_坤 | 园豆:98 (初学一级) | 2016-01-27 11:56

@丨akun丨: 

额...   如果只是从数据库导出数据到execl    你可先导一个表  ,然后重复这个过程,不久很简单嘛

_Arnold | 园豆:635 (小虾三级) | 2016-01-27 12:39

@xiaoxiao刀: 你想的简单啦,后面的回将前面的覆盖掉。。。

阿_坤 | 园豆:98 (初学一级) | 2016-01-27 12:41

@丨akun丨: 

不会呀   之前我用c#做过导出到excel 的demo  操作excel的时候   有参数可以输入从第几行插入 你不要选择已经插入数据的行就可以了呀

再说了可以把表导入不同 sheet中也可以呀    

_Arnold | 园豆:635 (小虾三级) | 2016-01-27 12:44

@xiaoxiao刀:你给了我一个很好的思路,搞定了,谢谢哈。

阿_坤 | 园豆:98 (初学一级) | 2016-01-28 10:45
其他回答(4)
0

foreach(var n in list.userlist){}

foreach(var m in list.dpList){}

大楚打码人 | 园豆:4313 (老鸟四级) | 2016-01-27 10:42

这是什么东西?为啥还有var?

支持(0) 反对(0) 阿_坤 | 园豆:98 (初学一级) | 2016-01-27 10:47
1

for(int i=0;i<list.size();i++){

  List l = list.get(i);

  for(Object o:l){

    

if(o instanceof User){
User user = (User) o;
System.out.println(user);
}
if(o instanceof Department){
Department dep = (Department) o;
System.out.println(dep);
}

  }

}

收获园豆:5
10407 | 园豆:207 (菜鸟二级) | 2016-01-28 10:38

这跟楼上讲的差不多,我按楼上的思路写出来了,嘿嘿

支持(0) 反对(0) 阿_坤 | 园豆:98 (初学一级) | 2016-01-28 10:44
0

你可以把两个list放在map里,不一定要放在list里,传一个map就好了...

根基 | 园豆:202 (菜鸟二级) | 2016-01-28 10:40
0
 1 public class MyTests
 2 {
 3     public static void main(String[] args)
 4     {
 5         List<List<Reportable>> reportables = new ArrayList<List<Reportable>>();
 6         
 7         List<Reportable> users = new ArrayList<Reportable>();
 8         users.add(new User());
 9         users.add(new User());
10         users.add(new User());
11         
12         List<Reportable> departments = new ArrayList<Reportable>();
13         departments.add(new Department());
14         departments.add(new Department());
15         departments.add(new Department());
16         
17         reportables.add(users);
18         reportables.add(departments);
19         
20         for (List<Reportable> reports : reportables)
21         {
22             for (Reportable element : reports)
23             {
24                 element.printMe();
25             }
26         }
27     }
28 }
29 
30 interface Reportable
31 {
32     public void printMe();
33 }
34 
35 class User implements Reportable
36 {
37     @Override
38     public void printMe()
39     {
40         System.out.println("I am a user.");
41     }
42 }
43 
44 class Department implements Reportable
45 {
46     @Override
47     public void printMe()
48     {
49         System.out.println("I am a department");
50     }
51 }
小米干饭 | 园豆:218 (菜鸟二级) | 2016-01-29 05:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册