黑马程序员技术交流社区

标题: 一个逻辑上的问题 [打印本页]

作者: 李礼彬    时间: 2013-5-12 11:11
标题: 一个逻辑上的问题
本帖最后由 李礼彬 于 2013-5-13 10:15 编辑

有个类aaa里有2个属性:Id 和 num
一个集合List<aaa>,保存了如下的数据,1、200,2、300,3、400,1、150,2、250,3、350 ............1、100,2、200,3、300等多个aaa类的信息,这个集合中aaa类的个数是不确定的。
我想把这个集合中所有Id相同的项的num的值相加,返回一个求和过的List<aaa>的集合,集合中是如下:1、700,2、750,3、1050

该怎么写算法呢?
作者: hou604720966    时间: 2013-5-12 12:11
  1. package com.test1;

  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.Comparator;

  5. class aaa{
  6.        
  7.         private String id;
  8.         private int num;
  9.         public String getId() {
  10.                 return id;
  11.         }
  12.         public void setId(String id) {
  13.                 this.id = id;
  14.         }
  15.         public int getNum() {
  16.                 return num;
  17.         }
  18.         public void setNum(int num) {
  19.                 this.num = num;
  20.         }
  21.        
  22.         public aaa(){
  23.                
  24.         }
  25.        
  26.         public aaa(String id, int num){
  27.                 this.id = id;
  28.                 this.num = num;
  29.         }
  30.        
  31. }

  32. class ComparatorUser implements Comparator{
  33.          public int compare(Object arg0, Object arg1) {
  34.                  aaa user0=(aaa)arg0;
  35.                  aaa user1=(aaa)arg1;
  36.        
  37.                    //首先比较年龄,如果年龄相同,则比较名字
  38.        
  39.                   int flag=user0.getId().compareTo(user1.getId());// 按字典顺序比较两个字符串。
  40.                   return flag;
  41.          }
  42.          
  43. }


  44. public class Test8 {
  45.         public static void main(String[] args) {
  46.                  ArrayList<aaa> list = new ArrayList();
  47.                  list.add(new aaa("1", 23));
  48.                  list.add(new aaa("2", 45));
  49.                  list.add(new aaa("1", 2));
  50.                  list.add(new aaa("1", 1231));
  51.                  list.add(new aaa("1", 12));
  52.                  list.add(new aaa("2", 12));
  53.                  list.add(new aaa("3", 2));
  54.                  list.add(new aaa("5", 12313));
  55.                  list.add(new aaa("4", 1231));
  56.                  ComparatorUser comparator=new ComparatorUser();
  57.                  Collections.sort(list,comparator);// 根据指定比较器产生的顺序对指定列表进行排序。
  58.                  
  59.                  int sum = 0;
  60.                  String id ="";
  61.                  boolean falg = true;
  62.                  
  63.                  for(aaa a : list){
  64.                          if(falg){
  65.                                  id = a.getId();
  66.                                  falg = false;
  67.                          }
  68.                          if(id.equals(a.getId())){
  69.                                 sum += a.getNum();
  70.                          }else{
  71.                                  System.out.println(id + "*******" + sum);
  72.                                  id = a.getId();
  73.                                  sum = 0;
  74.                                  sum += a.getNum();
  75.                          }
  76.                  }
  77.                  System.out.println(id + "*******" + sum);
  78.         }
  79. }
复制代码

作者: 乎¤_¤乎    时间: 2013-5-12 13:31
抛砖引玉,共同提高
  1. /*思路:1、先把集合转为数组(个人认为在迭代同时操作元素的情况下,用数组比较方便)
  2.         2、for循环查找ID相同的就把nun相加
  3.                 3、通过TreeSet去掉相同项目即可
  4.                 */
  5. import java.util.*;
  6. class aaa implements Comparable
  7. {
  8.         public aaa(int ID,int num)
  9.         {
  10.                 this.ID=ID;
  11.                 this.num=num;
  12.         }
  13.          int ID;
  14.          int num;
  15.         public  String toString()
  16.         {
  17.                  return ID+","+num;
  18.         }
  19.         public int compareTo(Object o)//使元素具有可比性
  20.         {
  21.                 aaa a=(aaa)o;
  22.                 if(a.ID>this.ID)
  23.                         return -1;
  24.                 if(a.ID<this.ID)
  25.                         return 1;
  26.                 return 0;
  27.         }

  28. }
  29. class newList
  30. {
  31.         public static void main(String[] args)
  32. {
  33.         List<aaa> list=new ArrayList<aaa>();
  34.         list.add(new aaa(1,200));
  35.         list.add(new aaa(2,100));
  36.         list.add(new aaa(1,200));
  37.         list.add(new aaa(3,150));
  38.         list.add(new aaa(3,200));
  39.         TreeSet<aaa> list1=new TreeSet<aaa>();
  40.         //集合转数组
  41.         aaa[]buf=list.toArray(new aaa[list.size()]);
  42.        
  43.         for(int i=0;i<list.size();i++)
  44.         {
  45.                 int aID=buf[i].ID;
  46.                 int anum=buf[i].num;
  47.                 for(int j=0;j<list.size();j++)
  48.                 {
  49.                         int bID=buf[j].ID;
  50.                         int bnum=buf[j].num;
  51.                         if(i!=j)//不是同一个元素时
  52.                         {

  53.                           if(aID==bID)//如果ID相同
  54.                          {
  55.               anum=anum+bnum;//求和
  56.                          }
  57.                         }
  58.                 }
  59.                 list1.add(new aaa(aID,anum));
  60.           
  61.                
  62.         }
  63.          System.out.println(list1);
  64.   }
  65. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2