首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java.util包的聚合框架应用

2012-10-14 
java.util包的集合框架应用package mix.testimport java.util.ArrayListimport java.util.Arraysimport

java.util包的集合框架应用

package mix.test;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.HashSet;import java.util.List;import java.util.Set;/** * @function 【武汉】歪尘(531314208) 2011-10-26 20:55:54<BR> *           set集合有一些javabean,我要怎么进行过滤?<BR> *           name 数量 <BR> *           a 10<BR> *           b 3<BR> *           a 3<BR> *           b 5<BR> *  *           name 数量 <BR> *           a 13<BR> *           b 8<BR> *  * @author ocaicai@yeah.net *  * @date 2011-10-27 */public class ListTest {/** * @param args */public static void main(String[] args) {List<Product> list = genernateProduct();list = getCountByName(list);System.out.println(Arrays.toString(list.toArray()));}public static List<Product> genernateProduct() {List<Product> list = new ArrayList<Product>();list.add(new Product("a", 10));list.add(new Product("b", 3));list.add(new Product("a", 3));list.add(new Product("c", 5));list.add(new Product("b", 5));list.add(new Product("c", 7));return list;}public static List<Product> getCountByName(List<Product> list) {List<Product> targetList = new ArrayList<Product>();int count = 0;Product product = null;// 去除掉重复name,得到有序的nameSet<String> nameSet = new HashSet<String>();List<String> nameList = new ArrayList<String>();for (int i = 0; i < list.size(); i++)nameSet.add(list.get(i).getName());for (String name : nameSet)nameList.add(name);Collections.sort(nameList);// 获取每个name的count和for (String name : nameList) {count = 0;for (int i = 0; i < list.size(); i++) {product = list.get(i);if (product.getName().equals(name)) {count += product.getCount();list.remove(i);i--;}}targetList.add(new Product(name, count));}return targetList;}}


package mix.test;public class Product {private String name;private int count;public Product(String name, int count) {super();this.name = name;this.count = count;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}@Overridepublic String toString() {return this.name + ":" + this.count;}}


输出结果:

[a:13, b:8, c:12]


第二种方法,感觉思路更清晰,运算复杂度更小:getCountByName方法
public static List<Product> getCountByName(List<Product> productList) {List<Product> targetList = new ArrayList<Product>();Product product = null;// 寻找该name的总count,然后删除该nameString name = null;int count = 0;while (productList.size() > 0) {name = productList.get(0).getName();count = 0;for (int i = 0; i < productList.size(); i++) {product = productList.get(i);if (product.getName().equals(name)) {count += product.getCount();productList.remove(i);i--;}}targetList.add(new Product(name, count));}return targetList;}





.

热点排行