黑马程序员技术交流社区
标题:
一个逻辑上的问题
[打印本页]
作者:
李礼彬
时间:
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
package com.test1;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class aaa{
private String id;
private int num;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public aaa(){
}
public aaa(String id, int num){
this.id = id;
this.num = num;
}
}
class ComparatorUser implements Comparator{
public int compare(Object arg0, Object arg1) {
aaa user0=(aaa)arg0;
aaa user1=(aaa)arg1;
//首先比较年龄,如果年龄相同,则比较名字
int flag=user0.getId().compareTo(user1.getId());// 按字典顺序比较两个字符串。
return flag;
}
}
public class Test8 {
public static void main(String[] args) {
ArrayList<aaa> list = new ArrayList();
list.add(new aaa("1", 23));
list.add(new aaa("2", 45));
list.add(new aaa("1", 2));
list.add(new aaa("1", 1231));
list.add(new aaa("1", 12));
list.add(new aaa("2", 12));
list.add(new aaa("3", 2));
list.add(new aaa("5", 12313));
list.add(new aaa("4", 1231));
ComparatorUser comparator=new ComparatorUser();
Collections.sort(list,comparator);// 根据指定比较器产生的顺序对指定列表进行排序。
int sum = 0;
String id ="";
boolean falg = true;
for(aaa a : list){
if(falg){
id = a.getId();
falg = false;
}
if(id.equals(a.getId())){
sum += a.getNum();
}else{
System.out.println(id + "*******" + sum);
id = a.getId();
sum = 0;
sum += a.getNum();
}
}
System.out.println(id + "*******" + sum);
}
}
复制代码
作者:
乎¤_¤乎
时间:
2013-5-12 13:31
抛砖引玉,共同提高
/*思路:1、先把集合转为数组(个人认为在迭代同时操作元素的情况下,用数组比较方便)
2、for循环查找ID相同的就把nun相加
3、通过TreeSet去掉相同项目即可
*/
import java.util.*;
class aaa implements Comparable
{
public aaa(int ID,int num)
{
this.ID=ID;
this.num=num;
}
int ID;
int num;
public String toString()
{
return ID+","+num;
}
public int compareTo(Object o)//使元素具有可比性
{
aaa a=(aaa)o;
if(a.ID>this.ID)
return -1;
if(a.ID<this.ID)
return 1;
return 0;
}
}
class newList
{
public static void main(String[] args)
{
List<aaa> list=new ArrayList<aaa>();
list.add(new aaa(1,200));
list.add(new aaa(2,100));
list.add(new aaa(1,200));
list.add(new aaa(3,150));
list.add(new aaa(3,200));
TreeSet<aaa> list1=new TreeSet<aaa>();
//集合转数组
aaa[]buf=list.toArray(new aaa[list.size()]);
for(int i=0;i<list.size();i++)
{
int aID=buf[i].ID;
int anum=buf[i].num;
for(int j=0;j<list.size();j++)
{
int bID=buf[j].ID;
int bnum=buf[j].num;
if(i!=j)//不是同一个元素时
{
if(aID==bID)//如果ID相同
{
anum=anum+bnum;//求和
}
}
}
list1.add(new aaa(aID,anum));
}
System.out.println(list1);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2