list 集合问题..

根正苗红 2012-05-30 01:55:20
list集合保存多个对象,对象里面有价格,数量,创建时间属性。现在功能是希望排序list集合。如果集合中存在对象之间价格属性有相等,那么就把两个对象合并成一个对象。价格不变,就是数量相加。就这样?怎么解决思路???
...全文
123 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightyq 2012-05-30
  • 打赏
  • 举报
回复

public class TT {

public static void main(String[] args) {
List<Product> ls = new ArrayList<Product>();
ls.add(new Product(10,10));
ls.add(new Product(5,10));
ls.add(new Product(5,20));
ls.add(new Product(5,30));
ls.add(new Product(20,30));

int size = ls.size();
for(int i = 0;i < size - 1;i++){
for(int j = i + 1;j < size;j++){
if(ls.get(i).getPrice() > ls.get(j).getPrice()){
Product max = ls.get(i);
Product min = ls.get(j);
ls.remove(i);
ls.remove(j);
ls.add(i,min);
ls.add(j,max);
}
if(ls.get(i).getPrice() == ls.get(j).getPrice()){
ls.get(i).addNum(ls.get(j).getNum());
ls.remove(j);
j--;
size--;
}
}
}
for(int i = 0;i < ls.size();i++){
System.out.println("price: " + ls.get(i).getPrice() + ",num: " + ls.get(i).getNum());
}
}

}
class Product {

private double price;
private int num;

public Product(int num, double price){
this.price = price;
this.num = num;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public void addNum(int num){
this.num = this.num + num;
}
}
qiaozizhen123 2012-05-30
  • 打赏
  • 举报
回复
其实你在第二个循环中判断一下是不是自己然后跳过去就行了,假如价格相同了(不是自己),你用list移除这个对象也行吧
昨日凡阳 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 4 楼 的回复:

最麻烦的就是外面创建一个新的List,然后来个双重循环,里面判断是否有对象的价格相等如果有就把改对象的数目+1,值得注意的就是循环的时候注意一下判断自己跟自己相同的情况。楼上的方法比较简单明了,不过Map结构要改一下不用list<Object>,直接Object就行,出现重复的object的数量加1即可,最后得到map,或者转成List
其实我刚开始的想法,也是……
[/Quote]

這沒有什麽難度吧。你就循環判斷就好了,把合并後的對象(其實不應該叫合并),也就是第三個對象,放到新創建的list中即可。
古布 2012-05-30
  • 打赏
  • 举报
回复
1。合并,删除重复的。
  for( int i = list.size() - 1; i> 0; i-- ) {
if ( list.get(i).price == list.get(i-1).price){
list.get(i-1).price +=list.get(i).price
list.remove(i);
}
}
2。排序。
Collections.sort(list, new Comparator() {...} );
根正苗红 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

最麻烦的就是外面创建一个新的List,然后来个双重循环,里面判断是否有对象的价格相等如果有就把改对象的数目+1,值得注意的就是循环的时候注意一下判断自己跟自己相同的情况。楼上的方法比较简单明了,不过Map结构要改一下不用list<Object>,直接Object就行,出现重复的object的数量加1即可,最后得到map,或者转成List
[/Quote]其实我刚开始的想法,也是你这样的、但是我觉得两个相同的集合双重循环比较肯定的是有重复的。然而我没有去想避免这个问题。判断自己跟自己。呵呵,所有思路没有往下走。不过还没有更快速的方法??
根正苗红 2012-05-30
  • 打赏
  • 举报
回复
我的思路就是List<Object> 中object 中有价格,数量,创建时间属性,不好意思,我用词不当,说的这个排序应该称为过滤,就是假如在比较对象的价格属性中,如果有相等的价格,我现在想的要结果是,把两个对象的价格属性值都相等,那么我就想把这个对象合并成一个对象,也就是删掉一个,然后再把两个对象的数量属性累加。
这样价格不用变。(或者是多个对象价格属性相等)。
sffx123 2012-05-30
  • 打赏
  • 举报
回复
最麻烦的就是外面创建一个新的List,然后来个双重循环,里面判断是否有对象的价格相等如果有就把改对象的数目+1,值得注意的就是循环的时候注意一下判断自己跟自己相同的情况。楼上的方法比较简单明了,不过Map结构要改一下不用list<Object>,直接Object就行,出现重复的object的数量加1即可,最后得到map,或者转成List
根正苗红 2012-05-30
  • 打赏
  • 举报
回复
但是map保存的key是不能有重复的,封装好map ,本来想比较的两个value 现在只存在一个value了。那样就没法累加数量了!
limin_ding 2012-05-30
  • 打赏
  • 举报
回复
楼主都把思路说出来了,就差把思路转化成代码了,这个你可以将这个需求写成方法,参数就是你需要排序的list


public List<Domain> sort(List list){
//这里面将你的思路转成代码
//最后将处理的结果返回
}

lvhongfen 2012-05-30
  • 打赏
  • 举报
回复
LZ 可以遍历集合,将价格做为键,对象做值,存入Map中
Map<Double,List<Object>> map=new HashMap<Double,List<Object>>();
map.containsKey(价钱)则取出对象,将数量相加

最后map中的map.values()就是你需要的对象了

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧