各位大牛,关于list ,看下这个问题.!!

在项目中遇到一个问题需要对 list中不同品牌的数据进行统计

list 结果集如下:

 阿迪达斯    运动鞋     2
 阿迪达斯    运动服     3
 阿迪达斯    跑鞋       4
 耐克        包         5
 耐克        运动裤     6

我想要的list中的结果集
阿迪达斯 运动鞋 2

阿迪达斯 运动服 3
阿迪达斯 跑鞋 4
合计 9
耐克 包 5
耐克 运动裤 6
合计 11

该怎么从list中处理?????

[code="java"]import java.util.ArrayList;
import java.util.List;

public class Test {
public static void main(String[] args) {
List resultList = new ArrayList();
List list = new ArrayList();
String[][] str = { { "阿迪达斯", "运动鞋", "2" }, { "阿迪达斯", "运动服", "3" },
{ "阿迪达斯", "跑鞋", "4" }, { "耐克", "包", "5" },
{ "耐克", "运动裤", "6" }, { "锐步", "包", "1" }, { "锐步", "运动裤", "6" } };
for (int i = 0; i < str.length; i++) {
list.add(str[i]);
}
int count = Integer.parseInt(list.get(0)[2]);

    resultList.add(list.get(0));
    for (int i = 0; i < list.size() - 1; i++) {
        if (list.get(i)[0] == list.get(i + 1)[0]) {
            count += Integer.parseInt(list.get(i + 1)[2]);
            resultList.add(list.get(i + 1));
        } else {
            String[] temp = new String[3];
            temp[0] = "合计";
            temp[1] = "";
            temp[2] = String.valueOf(count);
            resultList.add(temp);
            resultList.add(list.get(i + 1));
            count = Integer.parseInt(list.get(i + 1)[2]);
        }
    }
    String[] temp = new String[3];
    temp[0] = "合计";
    temp[1] = "";
    temp[2] = String.valueOf(count);
    resultList.add(temp);
}

}[/code]

仅供参考吧!!!!!!!!!!!!!!

楼主你没发现你先把一个list拆分成了两个list,然后又对两个list分别做统计么?

还有什么要说的么?

不同品牌应该是有个标示的吧,先循环list,判断出不同的品牌,然后分别统计就行了。

[code="java"]

List list = new ArrayList();

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

}

例如这样就可以取出数据来。
[/code]

[code="java"]public static void count(List list){
HashMap counter=new HashMap();
for(String[] row:list){
String name=row[0];
Integer c=counter.get(name);
if(c==){
counter.put(name,1);
}else{
counter.put(name,c++);
}
}
}[/code]
不知道你list里的数据结构是怎样的,大概的统计过程就类似,供参考。

没看明白意思!!!
是将第一个list改为第二个list,即先把一个list拆分成了两个list,然后又对两个list分别做统计么
还是lz从数据库取出的数据是第一个list,而希望取到的是第二个?

如果是第一个改为第二个按easyroomcsdn的方法就行,若是第二个情况请详细说明一下!

你是想把那个list里的品牌分成不同的list是吗?

你何不定义一个类呢,给list加泛型这样应该很明了了吧

[code="java"]import java.util.ArrayList;

import java.util.List;

public class Test {

public static void main(String[] args) {

List resultList = new ArrayList();

List list = new ArrayList();

String[][] str = { { "阿迪达斯", "运动鞋", "2" }, { "阿迪达斯", "运动服", "3" },

{ "阿迪达斯", "跑鞋", "4" }, { "耐克", "包", "5" },

{ "耐克", "运动裤", "6" }, { "锐步", "包", "1" }, { "锐步", "运动裤", "6" } };

for (int i = 0; i < str.length; i++) {

list.add(str[i]);

}

int count = Integer.parseInt(list.get(0)[2]);

    resultList.add(list.get(0));   
    for (int i = 0; i < list.size() - 1; i++) {   
        if (list.get(i)[0] == list.get(i + 1)[0]) {   
            count += Integer.parseInt(list.get(i + 1)[2]);   
            resultList.add(list.get(i + 1));   
        } else {   
            String[] temp = new String[3];   
            temp[0] = "合计";   
            temp[1] = "";   
            temp[2] = String.valueOf(count);   
            resultList.add(temp);   
            resultList.add(list.get(i + 1));   
            count = Integer.parseInt(list.get(i + 1)[2]);   
        }   
    }   
    String[] temp = new String[3];   
    temp[0] = "合计";   
    temp[1] = "";   
    temp[2] = String.valueOf(count);   
    resultList.add(temp);   
}   

} [/code]

 阿迪达斯    运动鞋     2
 耐克        运动裤     6 

按此格式定义一个class
class Goods
{
String brand;
String category;
int stock;
。。。
}
把相应的object按照brand的不同分别放在不同的list里面,
再用不同的brand作为key,将list放到map中
遍历的时候,可以根据不同的brand取出相应的list,遍历出list中的goods,同时累计该brand下的每个goods的stock,即为该brand的合计数量

总之,找出分类的方法就行 :wink:

这个有个高效的方法,就遍历一遍list就可以了。
配合Map
用一个域模型类 T 来描述你的产品,用一个boolean kinsmanship(T t)来做品牌匹配,然后用域模型的 品牌字段做Map 的key, 一个List做value 因为这个list中需要存储不同类型的数据,不要使用泛型就可以了,你可以在list的第0个位置存放一个list,这个list里面存放所有的域模型 第一个位置存放统计之后总计值。
思路就差不多了,感觉还是比较清晰的。

遍历一遍就可以统计出所有了。