急!!!怎样合并List中重复的数据,而且合并的List比原先的List要多一条字段数据???? 本帖最后由 wspff01 于 2011-02-18 15:16:01 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你构造一个新的Distinct 属性加上长度 也就是继承Distinct 多加个属性而已然后你重写equal方法 Distinct 的equal方法,然后比较就好了!!! 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; } }} 这本该是数据库的活,一条SQL指令就解决了,非拿到Java中做干嘛呢? 啊,我傻了应该这样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); } }} 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=6new:size=3City:东莞 Address:长安沙头南区 Number:2City:东莞 Address:桥头 Number:3City:东莞 Address:长安镇步步高 Number:1 稍微有个小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("西莞", "桥头");就错了 这是最简单 真正的数据库中,相同数据只是一部分的局部数据,即address为:查询条件(所属地区:惠州;地址或号码:烈山商业街;时间:2010-09-10 21:51:02)提取其中的“烈山商业街”进行重复累计,sql语句没法写的 忘说了一点,相同的数据前面的city是一样的 就这个还是好写的,如select count(*) from table1 group by substr( indexof(address, '地址或号码'), indexof(address, ';时间') - indexof(address, '地址或号码'))呵呵。不说啦,只当是闲聊,你忙去吧。 新建一个数据对象 加上出现次数这个属性然后以将以上数据存往一个MAP中 例: 以第一个字段 "东莞"为KEY value为 d1每次往MAP里面存的时候先通过KEY 判断是否存在 如果存在就把 出现次数+1 怎么我运行的结果成这样了 不对啊 有的数据没循环到啊 大家帮我看下 哪儿出问题了oldList size: 6newList size: 3City:东莞 Address:长安沙头南区 Number:1City:东莞 Address:桥头 Number:2City:东莞 Address:长安镇步步高 Number:0 Distinct 这个类里面加个几个get属性的方法就行啦.然后拿出来做点比较. Java 信息框 帮帮看看此小程序错哪了``` jtbale 问题 急,Calendar.MONTH的问题? 求问专家(实在在我能力范围外):如何让浏览器安装自订制的jre浏览器插件 精通wms和java的又想做兼职的请柬 开始学SWING,给个建议!? 门外汉的问题 关于线程的问题,求大神指点 初学java和c的困惑,望大侠指点迷经 请教各位,字符串识别问题,从一个字符串中提取去掉逗号的内容。 数据流接收、发送问题!
然后你重写equal方法 Distinct 的equal方法,然后比较就好了!!!
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;
}
}
}
应该这样
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);
}
}
}
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
Distinct d2 = new Distinct("东莞", "长安沙头南区");
Distinct d3 = new Distinct("东莞", "桥头");
Distinct d4 = new Distinct("东莞", "桥头");
Distinct d5 = new Distinct("东莞", "桥头");
Distinct d6 = new Distinct("东莞", "长安镇步步高");
假如都是东莞的就没问题,如果来了一个
Distinct d5 = new Distinct("西莞", "桥头");
就错了
address为:查询条件(所属地区:惠州;地址或号码:烈山商业街;时间:2010-09-10 21:51:02)
提取其中的“烈山商业街”进行重复累计,sql语句没法写的
忘说了一点,相同的数据前面的city是一样的
select count(*) from table1 group by substr( indexof(address, '地址或号码'), indexof(address, ';时间') - indexof(address, '地址或号码'))呵呵。
不说啦,只当是闲聊,你忙去吧。
然后以将以上数据存往一个MAP中
例: 以第一个字段 "东莞"为KEY value为 d1
每次往MAP里面存的时候先通过KEY 判断是否存在 如果存在就把 出现次数+1
大家帮我看下 哪儿出问题了
oldList size: 6
newList size: 3
City:东莞 Address:长安沙头南区 Number:1
City:东莞 Address:桥头 Number:2
City:东莞 Address:长安镇步步高 Number:0
然后拿出来做点比较.