List集合中的数据按照某一个属性进行分组

简介: 有的时候,我们需要在java中对集合中的数据进行分组运算。例如:Bill对象有money(float)和type(String)属性,现有个集合List,需要按照Bill的type属性进行分组,计算money的总和。

有的时候,我们需要在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
 
  1. public class test {    
  2.     public static void main(String[] args) {    
  3.         List<Bill> list = new ArrayList<Bill>();    
  4.         Bill b = new Bill();    
  5.         b.setType("A");    
  6.         b.setMoney(1);    
  7.         list.add(b);    
  8.         b = new Bill();    
  9.         b.setType("B");    
  10.         b.setMoney(2);    
  11.         list.add(b);    
  12.         b = new Bill();    
  13.         b.setType("C");    
  14.         b.setMoney(3);    
  15.         list.add(b);    
  16.         b = new Bill();    
  17.         b.setType("A");    
  18.         b.setMoney(1);    
  19.         list.add(b);    
  20.         b = new Bill();    
  21.         b.setType("B");    
  22.         b.setMoney(2);    
  23.         list.add(b);    
  24.         b = new Bill();    
  25.         b.setType("C");    
  26.         b.setMoney(3);    
  27.         list.add(b);    
  28.     
  29.     
  30.         List<Bill> bi = new ArrayList<Bill>();    
  31.         for (Bill bill : list) {    
  32.             boolean state = false;    
  33.             for (Bill bills : bi) {    
  34.                 if(bills.getType().equals(bill.getType())){    
  35.                     int money = bills.getMoney();    
  36.                     money += bill.getMoney();    
  37.                     bills.setMoney(money);    
  38.                     state = true;    
  39.                 }    
  40.             }    
  41.             if(!state){    
  42.                 bi.add(bill);    
  43.             }    
  44.         }    
  45.         for (Bill bill : bi) {    
  46.             System.out.println(bill.getType() +"    " +bill.getMoney());    
  47.         }    
  48.     }    
  49. }   


运行结果:

 

A    2
B    4
C    6

 

相关文章
|
3月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
3月前
|
安全
List集合特有功能
List集合特有功能
38 2
|
26天前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
53 5
|
1月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
27 3
|
2月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
22 3
|
2月前
|
Python
Python量化炒股的获取数据函数— get_billboard_list()
Python量化炒股的获取数据函数— get_billboard_list()
|
3月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
44 5
|
2月前
|
Java API 开发者
代码小妙招:用Java轻松获取List交集数据
在Java中获取两个 `List`的交集可以通过 `retainAll`方法和Java 8引入的流操作来实现。使用 `retainAll`方法更为直接,但会修改原始 `List`的内容。而使用流则提供了不修改原始 `List`、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。
96 1
|
5月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
919 1
|
4月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。