在项目中遇到一个问题需要对 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里面存放所有的域模型 第一个位置存放统计之后总计值。
思路就差不多了,感觉还是比较清晰的。
遍历一遍就可以统计出所有了。