List集合中的数据按照某一个属性进行分组
2017-11-28 19:09
288 查看
有的时候,我们需要在java中对集合中的数据进行分组运算。例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的type属性进行分组,计算money的总和。有以下两种思路:
思路一:
先计算集合中所有的type情况,然后对于每一种type去遍历集合计算money的和。伪代码如下:
Map<String,String> typeMap = new HashMap<String,String>();
fro (Bill bill : billList) {
typeMap.put(bill.getType,"");
}
fro(String t:typeMap.keySet) {
for (Bill bill : billList) {
if (bill.getType.equals(t)) {
//相应的业务处理
}
}
}
思路二:
[java] view plain copy
public class test {
public static void main(String[] args) {
List<Bill> list = new ArrayList<Bill>();
Bill b = new Bill();
b.setType("A");
b.setMoney(1);
list.add(b);
b = new Bill();
b.setType("B");
b.setMoney(2);
list.add(b);
b = new Bill();
b.setType("C");
b.setMoney(3);
list.add(b);
b = new Bill();
b.setType("A");
b.setMoney(1);
list.add(b);
b = new Bill();
b.setType("B");
b.setMoney(2);
list.add(b);
b = new Bill();
b.setType("C");
b.setMoney(3);
list.add(b);
List<Bill> bi = new ArrayList<Bill>();
for (Bill bill : list) {
boolean state = false;
for (Bill bills : bi) {
if(bills.getType().equals(bill.getType())){
int money = bills.getMoney();
money += bill.getMoney();
bills.setMoney(money);
state = true;
}
}
if(!state){
bi.add(bill);
}
}
for (Bill bill : bi) {
System.out.println(bill.getType() +" " +bill.getMoney());
}
}
}
运行结果:
A 2
B 4
C 6
思路一:
先计算集合中所有的type情况,然后对于每一种type去遍历集合计算money的和。伪代码如下:
Map<String,String> typeMap = new HashMap<String,String>();
fro (Bill bill : billList) {
typeMap.put(bill.getType,"");
}
fro(String t:typeMap.keySet) {
for (Bill bill : billList) {
if (bill.getType.equals(t)) {
//相应的业务处理
}
}
}
思路二:
[java] view plain copy
public class test {
public static void main(String[] args) {
List<Bill> list = new ArrayList<Bill>();
Bill b = new Bill();
b.setType("A");
b.setMoney(1);
list.add(b);
b = new Bill();
b.setType("B");
b.setMoney(2);
list.add(b);
b = new Bill();
b.setType("C");
b.setMoney(3);
list.add(b);
b = new Bill();
b.setType("A");
b.setMoney(1);
list.add(b);
b = new Bill();
b.setType("B");
b.setMoney(2);
list.add(b);
b = new Bill();
b.setType("C");
b.setMoney(3);
list.add(b);
List<Bill> bi = new ArrayList<Bill>();
for (Bill bill : list) {
boolean state = false;
for (Bill bills : bi) {
if(bills.getType().equals(bill.getType())){
int money = bills.getMoney();
money += bill.getMoney();
bills.setMoney(money);
state = true;
}
}
if(!state){
bi.add(bill);
}
}
for (Bill bill : bi) {
System.out.println(bill.getType() +" " +bill.getMoney());
}
}
}
运行结果:
A 2
B 4
C 6
相关文章推荐
- java中对list集合中的数据按照某一个属性进行分组
- 对数据按照范围进行分组查询
- js根据json数据中的某一个属性来给数据分组
- 将一个存放了若干个对象的数组按照对象的某个属性值进行分组
- 按照用户ID进行分组,保留用户的最新的1000条数据,超过1000条的都进行删除
- JPA学习笔记---JPA实体Bean的建立---链接上一个博文:对实体Bean中属性进行操作:保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数据,可以存放
- 对ArrayList按照某个属性进行分组
- java ArrayList按照同一属性进行分组
- SQL SERVER 取出 一张表中的每个分组中 的第一条数据 ,第一条数据是按照某种排序规则进行排序取的第一条
- java ArrayList按照同一属性进行分组
- js 按照对象某一个属性进行排序
- java ArrayList按照同一属性进行分组为HashMap
- java集合list中的数据按照多个属性分组
- 按照List中Object的某个属性进行分组
- Hadoop学习笔记—4.初识MapReduce 一、神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算。对于大数据
- Sql2005 tips 按照某些条件(一个or多个)分组,取分组中满足某个条件的一条记录
- U-Mail邮件系统能否针对某一个账户进行数据还原?
- storm的ack和fail为了保证数据能正确的被处理, 对于spout产生的每一个tuple, storm都会进行跟踪, 这里面涉及到ack/fail的处理, 如果一个tuple处理成功, 会调用s
- 如何给jqGrid表格按照字段进行分组
- SQLServer中利用NTILE函数对数据进行分组的一点使用