本帖最后由 wspff01 于 2011-02-18 15:16:01 编辑

解决方案 »

  1.   

    你构造一个新的Distinct   属性加上长度 也就是继承Distinct   多加个属性而已
    然后你重写equal方法  Distinct   的equal方法,然后比较就好了!!!
      

  2.   


    public class DistinctList extends ArrayList{

    private static Map<String,Integer> distinct_map = new HashMap<String,Integer>(); 
    private Integer distinct_int_value = null;

    public void show(){
    for(String map_key:distinct_map.keySet()){
    System.out.println(map_key + "  " + distinct_map.get(map_key));
    }
    }

    @Override
    public boolean add(Object e){

    if(e instanceof Object){
    Object distinct = (Object)e;
    if(distinct_map.containsKey(distinct.getAddress())){
    Integer distinct_int_value = distinct_map.get(distinct.getAddress());
    distinct_int_value = distinct_int_value+1;
    return true;
    }else{
    distinct_map.put(distinct.getAddress(), 1);
    return super.add(e);
    }
    }else{
    return false;
    }

    }
    }
      

  3.   

    这本该是数据库的活,一条SQL指令就解决了,非拿到Java中做干嘛呢?
      

  4.   

    啊,我傻了
    应该这样
    public class DistinctList extends ArrayList{

    private static Map<String,Integer> distinct_map = new HashMap<String,Integer>(); 
    private Integer distinct_int_value = null;

    public void show(){
    for(String map_key:distinct_map.keySet()){
    System.out.println(map_key + "  " + distinct_map.get(map_key));
    }
    }


    public boolean add(Distinct distinct){
    if(distinct_map.containsKey(distinct.getAddress())){
    Integer distinct_int_value = distinct_map.get(distinct.getAddress());
    distinct_int_value = distinct_int_value+1;
    return true;
    }else{
    distinct_map.put(distinct.getAddress(), 1);
    return super.add(e);
    }
    }
    }
      

  5.   


    package org.programmer.test.entity;public class Distinct { private String city; private String address; private int number; public Distinct(String city, String address) {
    this.city = city;
    this.address = address;
    } @Override
    public String toString() {
    return "City:" + city + "\tAddress:" + address + "\tNumber:" + number;
    } public String getCity() {
    return city;
    } public void setCity(String city) {
    this.city = city;
    } public String getAddress() {
    return address;
    } public void setAddress(String address) {
    this.address = address;
    } public int getNumber() {
    return number;
    } public void setNumber(int number) {
    this.number = number;
    }}
    =====================================================================================
    package org.programmer.test.service;import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;import com.inspur.test.entity.Distinct;public class Test {
    public static void main(String[] args) {
    Distinct d1 = new Distinct("东莞", "长安沙头南区");
    Distinct d2 = new Distinct("东莞", "长安沙头南区");
    Distinct d3 = new Distinct("东莞", "桥头");
    Distinct d4 = new Distinct("东莞", "桥头");
    Distinct d5 = new Distinct("东莞", "桥头");
    Distinct d6 = new Distinct("东莞", "长安镇步步高");
    List<Distinct> oldList = new ArrayList<Distinct>();
    oldList.add(d1);
    oldList.add(d2);
    oldList.add(d3);
    oldList.add(d4);
    oldList.add(d5);
    oldList.add(d6);
    System.out.println("old:size=" + oldList.size());
    List<Distinct> newList = new ArrayList<Distinct>();
    Iterator<Distinct> it = oldList.iterator();
    while (it.hasNext()) {
    Distinct d = it.next();
    Iterator<Distinct> temp = newList.iterator();
    boolean flag = false;
    while (temp.hasNext()) {
    Distinct dt = temp.next();
    if (d.getCity().equals(dt.getCity())
    && d.getAddress().equals(dt.getAddress())) {
    dt.setNumber(dt.getNumber() + 1);
    flag = true;
    break;
    }
    }
    if (flag == false) {
    newList.add(d);
    }
    }
    System.out.println("new:size=" + newList.size());
    Iterator<Distinct> temp = newList.iterator();
    boolean flag = false;
    while (temp.hasNext()) {
    Distinct dt = temp.next();
    System.out.println(dt);
    } }
    }
    测试结果:
    old:size=6
    new:size=3
    City:东莞 Address:长安沙头南区 Number:2
    City:东莞 Address:桥头 Number:3
    City:东莞 Address:长安镇步步高 Number:1
      

  6.   

    稍微有个小bug。        Distinct d1 = new Distinct("东莞", "长安沙头南区");
            Distinct d2 = new Distinct("东莞", "长安沙头南区");
            Distinct d3 = new Distinct("东莞", "桥头");
            Distinct d4 = new Distinct("东莞", "桥头");
            Distinct d5 = new Distinct("东莞", "桥头");
            Distinct d6 = new Distinct("东莞", "长安镇步步高");
    假如都是东莞的就没问题,如果来了一个
    Distinct d5 = new Distinct("西莞", "桥头");
    就错了
      

  7.   

    这是最简单 真正的数据库中,相同数据只是一部分的局部数据,即
    address为:查询条件(所属地区:惠州;地址或号码:烈山商业街;时间:2010-09-10 21:51:02)
    提取其中的“烈山商业街”进行重复累计,sql语句没法写的
      

  8.   


    忘说了一点,相同的数据前面的city是一样的
      

  9.   

    就这个还是好写的,如
    select count(*) from table1 group by substr( indexof(address, '地址或号码'), indexof(address, ';时间') - indexof(address, '地址或号码'))呵呵。
    不说啦,只当是闲聊,你忙去吧。
      

  10.   

    新建一个数据对象 加上出现次数这个属性
    然后以将以上数据存往一个MAP中 
    例: 以第一个字段 "东莞"为KEY value为 d1
    每次往MAP里面存的时候先通过KEY 判断是否存在 如果存在就把 出现次数+1
      

  11.   

    怎么我运行的结果成这样了 不对啊 有的数据没循环到啊
      大家帮我看下  哪儿出问题了
    oldList size: 6
    newList size: 3
    City:东莞 Address:长安沙头南区 Number:1
    City:东莞 Address:桥头 Number:2
    City:东莞 Address:长安镇步步高 Number:0
      

  12.   

    Distinct 这个类里面加个几个get属性的方法就行啦.
    然后拿出来做点比较.