`
llmy
  • 浏览: 120942 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

去除List集合中的某几个属性相同的重复对象并对某个属性进行计数、排序

    博客分类:
  • J2EE
阅读更多
import java.util.*;
/*
该示例为把集合中把同一箱子(箱号和名字相同即认定为同一箱子)根据型号的进行统计输出
例如:
   箱号    箱型   名字
    1       20     箱1
     2       40     箱2
     2       20     箱2
     2       40     箱2

   要求处理成的结果:
   箱号   名字  20箱型数量  40箱型数量
   1      箱1      1            0
    2      箱2      2            1

*/
public class EquComp{
    public static void main(String[] args){
           List<Box> hs = new ArrayList<Box>();
           hs.add(new Box("1","箱1","20"));
           hs.add(new Box("3","箱2","40"));
           hs.add(new Box("2","箱2","40"));
		   hs.add(new Box("2","箱2","20"));
		   hs.add(new Box("2","箱2","40"));
           hs.add(new Box("2","箱2","40"));
           List<Box> newStats = new EquComp().getBox(hs);
           System.out.println("箱号--------名字--------20箱型数量--------40箱型数量");
           for(Box s:newStats){
                System.out.println(s.getBoxNo()+"------------"+ s.getBoxName()+"------------"+s.getCount20()+"----------------"+ s.getCount40());
           }

    }

    public List<Box> getBox(List<Box> hs){
		List<Box> boxList = new ArrayList<Box>();
		boolean flag = false;
		String boxType = "";
		for (Box sta : hs) {
			flag = false;
			boxType = sta.getBoxType();
			for (Box n : boxList) {
				if (n.equals(sta)) {
					if ("20".equals(boxType)) {
						n.setCount20(n.getCount20()+1);
					} else if ("40".equals(boxType)) {
						n.setCount40(n.getCount40()+1);
					}
					flag = true;
					break;
				}
			}
			if (!flag) {
				if ("20".equals(boxType)) {
					sta.setCount20(1);
				} else if ("40".equals(boxType)) {
					sta.setCount40(1);
				}
				boxList.add(sta);
			}

	   }
	   //通过程序进行排序
	   Collections.sort(boxList,new ComparableYS());
	   return boxList;
    }

}


class ComparableYS implements Comparator{

    public int compare(Object o1, Object o2){
         Box s1 = (Box)o1;
         Box s2 = (Box)o2;
         //排序顺序 boxNo,boxName
         if(!s1.getBoxNo().equals(s2.getBoxNo())){
               return s1.getBoxNo().compareTo(s2.getBoxNo());
         }else if(!s1.getBoxName().equals(s2.getBoxName())){
               return s1.getBoxName().compareTo(s2.getBoxName());
         }else{
               return 0;
         }
    }

    public boolean equals(Object o){
         return false;
    }

}

class Box{
   private String boxNo;//箱号
   private String boxType;  //箱型
   private String boxName;//名字
   private int count_20;//箱型20数量
   private int count_40;//箱型40数量

   public void setCount40(int count_40){
        this.count_40 = count_40;
   }
   public void setCount20(int count_20){
       this.count_20 = count_20;
   }
   public int getCount20(){
       return count_20;
   }
   public int getCount40(){
       return count_40;
   }
   public Box(String boxNo,String boxName,String boxType){
       this.boxNo = boxNo;
       this.boxName = boxName;
       this.boxType = boxType;
   }
     public String getBoxNo() {
        return boxNo;
    }

    public void setBoxNo(String boxNo) {
        this.boxNo = boxNo;
    }

    public String getBoxName() {
        return boxName;
    }

    public void setBoxName(String boxName) {
        this.boxName = boxName;
    }

    public String getBoxType() {
        return boxType;
    }

    public void setBoxType(String boxType) {
        this.boxType = boxType;
    }
    //判断是否是同一个箱子
    public boolean equals(Object o){
        Box s = (Box)o;
        return s.getBoxNo().equals(boxNo)&& s.getBoxName().equals(boxName)?true:false;
   }
}

注: 本示例是通过程序来控制的,问题:该问题应该可以通过sql语句来进行处理,首先把要统计的列根据某些条件进行列转行后,分组进行计数。

分享到:
评论

相关推荐

    Python编程实例.docx

    4. **集合(Set)**:`delete_repetition=set(new_list)`利用集合的特性去除列表中的重复元素,创建一个不包含重复成绩的新集合。 5. **排序(Sorted)**:`in_order=sorted(delete_repetition)`对处理后的集合进行...

    觅职渣记-互联网技术类笔试面试总结

    `map`是一种关联容器,用于存储键值对,按键排序且不允许重复。 #### 数据结构 ##### 树 **1. 基本知识** - **二叉树**:每个节点最多有两个子节点的树结构。 - **二叉搜索树(BST)**:左子树的所有节点都小于...

    freemarker总结

    对sequence 按里面的对象的属性value进行排序 如: sequence里面放入的是10 个user对象,user对象里面包含name,age等属性 sequence?sort_by(name) 表示所有的user按user.name进行排序 hashes内置方法 hash?keys 返回...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例057 用List集合传递学生信息 70 实例058 用TreeSet生成不重复自动排序 随机数组 71 实例059 Map映射集合实现省市级联选择框 73 第4章 字符串处理技术 75 4.1 格式化字符串 76 实例060 把数字格式化为货币字符串 ...

    STL范型编程

    STL中的容器是存储元素的对象,如vector(动态数组)、list(双向链表)、deque(双端队列)、set(集合)、map(映射)等。每个容器都有其特定的内存管理和访问性能特性,程序员可以根据需求选择合适的容器类型。 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。  系统预定义角色 预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下面我们就简单介绍些系统角色:  CONNECT...

    Oracle学习(比较齐全的介绍)

    **排序数据**可以根据一个或多个字段的值对结果集进行排序。 ##### 1. 单一字段排序 按单一字段排序: ```sql SELECT * FROM table_name ORDER BY column_name ASC; -- 或 DESC ``` ##### 2. 手动指定排序顺序 ...

    hive函数.docx

    除了基本的复杂类型函数之外,还可以使用其他函数对复杂类型进行更复杂的操作,如`concat`(连接数组)、`sort_array`(排序数组)等。 ### 2. 内置函数 #### 2.1 数学函数 数学函数提供了一系列基本的数学运算,...

Global site tag (gtag.js) - Google Analytics