java根据 字段删除重复的数据 java根据 字段删除重复的数据java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 单纯全删掉: delete from 你的表名 where CtfTp in (select CtfTp from 你的表名 group by CtfTp having count(*)>1)left join 轻忽视第二行的left join,手误 回2楼,要用java实现,不要用sql谢谢 你的文件是txt文件还是指数据库读取出来的数据文件,如果是数据库里面读出来的要是要用sql语句吧。如果是从txt或者其他文件读出来的数据,可以先定义一个实体类Data对应你的数据:Name,CardNo,Descriot,CtfTp,CtfId,Gender,Birthday,Address,然后根据 CtfTp 删除ArrayList<Data> 中重复的元素 以下是伪代码,说个意思不保证编译通过//假设你的数据都是存在rowList里面的List<Map<String, String>> rowList = new List<Map<String,String>>();// 这个List放处理后不重复的数据List<Map<String, String>> distinctRowList = new List<Map<String,String>>();// 当然你用do while的方式来做也行String CtfTp = rowList.get(0).get("CtfTp");distinctRowList.add(rowList.get(0));for (int i = 1; i < rowList.size(); i++) { HashMap<String, String> currentRow = rowList.get(i); if (!CtfTp.equals(currentRow.get("CtfTp"))) { distinctRowList.add(currentRow); } CtfTp = currentRow.get("CtfTp");} 还有个前提,你的数据已经按照CtfTp字段排过序了 这个是不用排序的List<Map<String, String>> rowList = new List<Map<String,String>>();List<Map<String, String>> distinctRowList = new List<Map<String,String>>();Map<String, Map<String, String>> keyRowList = new Map<String, Map<String,String>>();for (Iterator iterator = rowList.iterator(); iterator.hasNext();) { Map<String, String> currentRow = (Map<String, String>) iterator.next(); try{keyRowList.put(currentRow.get("CtfTp"), currentRow);}catch(Exception e){}}for (Map<String, String> map : keyRowList.values()) { distinctRowList.add(map);} 回复BrightFireOfCy:我的要求是获得CtfTp的下标然后在去判断CtfTp的字段内容是否有重复,有就删除保留第一条:比如 String strArray[] = fr.toString().split(","); outkey = strArray[3]; //开始获得下标是CtfTp,然后判断CtfTp 的内容是否有重复,如果有删除这条记录(只保留第一条), Map<String,Object>recordMap = new HashMap<String,Object>();//循环按行读取文件...String strArray[] = fr.toString().split(",");String key = strArray[3];if(recordMap.get(key)==null){ recordMap.put(key,strArray);}else{ continue; //继续读取下一行}//读完文件结束循环//recordMap里放的就是你想要的 回复BrightFireOfCy文件数据格式:Name,CardNo,Descriot,CtfTp,CtfId,Gender,Birthday,Address彬,,,ID,xxxxx21059,M,20101001,,,F,,CHN,,,,,,,,139,19:46:02,4000000珊,,,ID,xxxxx811090189,M,20101001,,,F,,CHN,,,,,,,,158世,,,ID,4xxxxx1772,M,19880129,,,F,,CHN,,,,,,,,152108,2,1,,,,,0,2010-10-19 超,,,ID,4xxxxx1772,M,20101001,,,F,,CHN,,,,,,,,1585091,,,mc06o.cn,,,,,,,,0,2010-10-19 19:46:04,4000003磊,,,ID,4xxxxx1772,M,19831011,,,F,,CHN,,,,,,,,159159,362,,565408,,,,,,,,0,2010-10-19 19:46:05,4000004芳,,,ID,xxxxx811090189,M,20101001,,,F,,CHN,,,,,,,,1506:05,4005要求:读取文件后,我要根据CtfTp 字段删除对应的字段内容,删除掉重复的,只保留第一条。删除后的数据格式是:彬,,,ID,xxxxx21059,M,20101001,,,F,,CHN,,,,,,,,139,19:46:02,4000000珊,,,ID,xxxxx811090189,M,20101001,,,F,,CHN,,,,,,,,158世,,,ID,4xxxxx1772,M,19880129,,,F,,CHN,,,,,,,,152108,2,1,,,,,0,2010-10-19 //将map转为listList list = new ArrayList(recordMap.values()); 在下发的两段代码都能做到阿,前提是你把文件读到定义好的List里lz不会连读文件的代码都要在下码一遍吧在下能上网的机器里面没有开发环境阿,上面的代码都是手打的啊,lz体谅一下在下行不? 读写csv文件请参照下面的连接http://blog.csdn.net/madai/article/details/5014186 在下发的两段代码都能做到阿,前提是你把文件读到定义好的List里lz不会连读文件的代码都要在下码一遍吧在下能上网的机器里面没有开发环境阿,上面的代码都是手打的啊,lz体谅一下在下行不?public class ReadText { public static void main(String[] args) throws Exception { dumplicateData("F:/allubuntu/data/xw.txt", "F:/allubuntu/data/dumplicateName.txt"); } /** * @param fileName 文件名 * @param dumplicateName 去重复后的文件名 * @throws IOException */ public static void dumplicateData(String fileName, String dumplicateName) throws IOException { FileReader fr = new FileReader(fileName); FileWriter fw = new FileWriter(dumplicateName); Map<String, Object> recordMap = new HashMap<String, Object>(); char[] chs = new char[1024]; int len = 0; String outkey = ""; if (fr != null) { //读取文件 if (fr.toString().indexOf("Name") >= 0) { while ((len = fr.read(chs)) != -1) { String strArray[] = fr.toString().split(","); outkey = strArray[3]; if (recordMap.get(outkey) == null) { recordMap.put(outkey, strArray); } else { continue; } fw.write(chs, 0, len); fw.flush(); } } // 释放资源 fw.close(); fr.close(); } }}怎么将读取的文件放在你说的集合。我现在读取文件后写不到目标文件。 发现用Excel写代码也不错,至少对的起import java.io.*;import java.util.*;public class TestMain { public static void main(String[] args) { ArrayList<HashMap<String, String>> rowList = readCsv("c:\\csv.csv"); ArrayList<HashMap<String, String>> distinctRowList = new ArrayList<HashMap<String,String>>(); HashMap<String, HashMap<String, String>> keyRowList = new HashMap<String, HashMap<String,String>>(); for (Iterator<HashMap<String, String>> iterator = rowList.iterator(); iterator.hasNext();) { HashMap<String, String> currentRow = iterator.next(); try{ keyRowList.put(currentRow.get("CtfTp"), currentRow); }catch(Exception e){ } } for (HashMap<String, String> hashMap : keyRowList.values()) { distinctRowList.add(hashMap); } writeCsv(distinctRowList, "c:\\csv.csv"); } private static ArrayList<HashMap<String, String>> readCsv(String fileName) { ArrayList<HashMap<String, String>> retList = new ArrayList<HashMap<String,String>>(); String[] keys = new String[8]; File csv = null; BufferedReader br = null; try { csv = new File(fileName); br = new BufferedReader(new FileReader(csv)); String line = ""; int lineIndex = 0; while ((line = br.readLine()) != null) { String[] cells = line.split(","); if (lineIndex > 0) { HashMap<String, String> row = new HashMap<String, String>(); for (int i = 0; i < keys.length; i++) { row.put(keys[i], cells[i]); } retList.add(row); } else { for (int i = 0; i < keys.length; i++) { keys[i]=cells[i]; } } lineIndex++; } } catch (Exception e) { e.printStackTrace(); } finally { if (br!=null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return retList; } private static void writeCsv(ArrayList<HashMap<String, String>> data, String fileName){ File csv = null; BufferedWriter bw = null; try { csv = new File(fileName); if (csv.exists()) { csv.delete(); } bw = new BufferedWriter(new FileWriter(csv, false)); bw.newLine(); bw.write("Name,CardNo,Descriot,CtfTp,CtfId,Gender,Birthday,Address"); for (Iterator<HashMap<String, String>> iterator = data.iterator(); iterator .hasNext();) { HashMap<String, String> currentRow = iterator.next(); bw.newLine(); bw.write(String.format("%s,%s,%s,%s,%s,%s,%s,%s", currentRow.get("Name"), currentRow.get("CardNo"), currentRow.get("Descriot"), currentRow.get("CtfTp"), currentRow.get("CtfId"), currentRow.get("Gender"), currentRow.get("Birthday"), currentRow.get("Address"))); } } catch (Exception e) { e.printStackTrace(); } finally { if(bw !=null){ try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } } }} 在下发的两段代码都能做到阿,前提是你把文件读到定义好的List里lz不会连读文件的代码都要在下码一遍吧在下能上网的机器里面没有开发环境阿,上面的代码都是手打的啊,lz体谅一下在下行不?public class ReadText { public static void main(String[] args) throws Exception { dumplicateData("F:/allubuntu/data/xw.txt", "F:/allubuntu/data/dumplicateName.txt"); } /** * @param fileName 文件名 * @param dumplicateName 去重复后的文件名 * @throws IOException */ public static void dumplicateData(String fileName, String dumplicateName) throws IOException { FileReader fr = new FileReader(fileName); FileWriter fw = new FileWriter(dumplicateName); Map<String, Object> recordMap = new HashMap<String, Object>(); char[] chs = new char[1024]; int len = 0; String outkey = ""; if (fr != null) { //读取文件 if (fr.toString().indexOf("Name") >= 0) { while ((len = fr.read(chs)) != -1) { String strArray[] = fr.toString().split(","); outkey = strArray[3]; if (recordMap.get(outkey) == null) { recordMap.put(outkey, strArray); } else { continue; } fw.write(chs, 0, len); fw.flush(); } } // 释放资源 fw.close(); fr.close(); } }}怎么将读取的文件放在你说的集合。我现在读取文件后写不到目标文件。哎,我怎么看到ubuntu了, 你不linux嘛, 用shell搞不是更简单? 白让我码这么多代码 将String二维数组转换成double类型二维数组 菜鸟求教!!!!急 复制图片文件大家来看看问题在哪儿 想问一下有什么java操作dbf的方法!!!! 问个java的简单问题 在两台机子传输ZIP文件的问题? 安装wtk后如何在命令提示符下用midp里的类库?? java中我如何判断COM口是否已存在? java 加密问题 我通过了! String的问题 一个关于image的奇怪异常 Uncaught error fetching image:
delete from 你的表名 where CtfTp in (select CtfTp from 你的表名 group by CtfTp having count(*)>1)
left join
然后根据 CtfTp 删除ArrayList<Data> 中重复的元素
List<Map<String, String>> rowList = new List<Map<String,String>>();// 这个List放处理后不重复的数据
List<Map<String, String>> distinctRowList = new List<Map<String,String>>();// 当然你用do while的方式来做也行
String CtfTp = rowList.get(0).get("CtfTp");
distinctRowList.add(rowList.get(0));
for (int i = 1; i < rowList.size(); i++) {
HashMap<String, String> currentRow = rowList.get(i);
if (!CtfTp.equals(currentRow.get("CtfTp"))) {
distinctRowList.add(currentRow);
}
CtfTp = currentRow.get("CtfTp");
}
List<Map<String, String>> distinctRowList = new List<Map<String,String>>();Map<String, Map<String, String>> keyRowList = new Map<String, Map<String,String>>();
for (Iterator iterator = rowList.iterator(); iterator.hasNext();) {
Map<String, String> currentRow = (Map<String, String>) iterator.next();
try{keyRowList.put(currentRow.get("CtfTp"), currentRow);}catch(Exception e){}
}for (Map<String, String> map : keyRowList.values()) {
distinctRowList.add(map);
}
我的要求是获得CtfTp的下标然后在去判断CtfTp的字段内容是否有重复,有就删除保留第一条:比如
String strArray[] = fr.toString().split(",");
outkey = strArray[3];
//开始获得下标是CtfTp,然后判断CtfTp 的内容是否有重复,如果有删除这条记录(只保留第一条),
//循环按行读取文件
...
String strArray[] = fr.toString().split(",");
String key = strArray[3];
if(recordMap.get(key)==null){
recordMap.put(key,strArray);
}
else{
continue; //继续读取下一行
}//读完文件结束循环
//recordMap里放的就是你想要的
文件数据格式:
Name,CardNo,Descriot,CtfTp,CtfId,Gender,Birthday,Address
彬,,,ID,xxxxx21059,M,20101001,,,F,,CHN,,,,,,,,139,19:46:02,4000000
珊,,,ID,xxxxx811090189,M,20101001,,,F,,CHN,,,,,,,,158
世,,,ID,4xxxxx1772,M,19880129,,,F,,CHN,,,,,,,,152108,2,1,,,,,0,2010-10-19
超,,,ID,4xxxxx1772,M,20101001,,,F,,CHN,,,,,,,,1585091,,,mc06o.cn,,,,,,,,0,2010-10-19 19:46:04,4000003
磊,,,ID,4xxxxx1772,M,19831011,,,F,,CHN,,,,,,,,159159,362,,565408,,,,,,,,0,2010-10-19 19:46:05,4000004
芳,,,ID,xxxxx811090189,M,20101001,,,F,,CHN,,,,,,,,1506:05,4005
要求:读取文件后,我要根据CtfTp 字段删除对应的字段内容,删除掉重复的,只保留第一条。
删除后的数据格式是:
彬,,,ID,xxxxx21059,M,20101001,,,F,,CHN,,,,,,,,139,19:46:02,4000000
珊,,,ID,xxxxx811090189,M,20101001,,,F,,CHN,,,,,,,,158
世,,,ID,4xxxxx1772,M,19880129,,,F,,CHN,,,,,,,,152108,2,1,,,,,0,2010-10-19
List list = new ArrayList(recordMap.values());
lz不会连读文件的代码都要在下码一遍吧
在下能上网的机器里面没有开发环境阿,
上面的代码都是手打的啊,lz体谅一下在下行不?
http://blog.csdn.net/madai/article/details/5014186
lz不会连读文件的代码都要在下码一遍吧
在下能上网的机器里面没有开发环境阿,
上面的代码都是手打的啊,lz体谅一下在下行不?public class ReadText { public static void main(String[] args) throws Exception { dumplicateData("F:/allubuntu/data/xw.txt",
"F:/allubuntu/data/dumplicateName.txt");
} /**
* @param fileName 文件名
* @param dumplicateName 去重复后的文件名
* @throws IOException
*/
public static void dumplicateData(String fileName, String dumplicateName)
throws IOException { FileReader fr = new FileReader(fileName);
FileWriter fw = new FileWriter(dumplicateName);
Map<String, Object> recordMap = new HashMap<String, Object>();
char[] chs = new char[1024];
int len = 0;
String outkey = "";
if (fr != null) {
//读取文件
if (fr.toString().indexOf("Name") >= 0) {
while ((len = fr.read(chs)) != -1) {
String strArray[] = fr.toString().split(",");
outkey = strArray[3];
if (recordMap.get(outkey) == null) {
recordMap.put(outkey, strArray);
} else {
continue;
}
fw.write(chs, 0, len);
fw.flush();
}
}
// 释放资源
fw.close();
fr.close();
} }
}
怎么将读取的文件放在你说的集合。我现在读取文件后写不到目标文件。
import java.util.*;public class TestMain { public static void main(String[] args) {
ArrayList<HashMap<String, String>> rowList = readCsv("c:\\csv.csv");
ArrayList<HashMap<String, String>> distinctRowList = new ArrayList<HashMap<String,String>>(); HashMap<String, HashMap<String, String>> keyRowList = new HashMap<String, HashMap<String,String>>();
for (Iterator<HashMap<String, String>> iterator = rowList.iterator(); iterator.hasNext();) {
HashMap<String, String> currentRow = iterator.next();
try{
keyRowList.put(currentRow.get("CtfTp"), currentRow);
}catch(Exception e){
}
}
for (HashMap<String, String> hashMap : keyRowList.values()) {
distinctRowList.add(hashMap);
}
writeCsv(distinctRowList, "c:\\csv.csv");
}
private static ArrayList<HashMap<String, String>> readCsv(String fileName) {
ArrayList<HashMap<String, String>> retList = new ArrayList<HashMap<String,String>>();
String[] keys = new String[8];
File csv = null;
BufferedReader br = null;
try {
csv = new File(fileName); br = new BufferedReader(new FileReader(csv)); String line = "";
int lineIndex = 0;
while ((line = br.readLine()) != null) {
String[] cells = line.split(",");
if (lineIndex > 0) {
HashMap<String, String> row = new HashMap<String, String>();
for (int i = 0; i < keys.length; i++) {
row.put(keys[i], cells[i]);
}
retList.add(row);
} else {
for (int i = 0; i < keys.length; i++) {
keys[i]=cells[i];
}
}
lineIndex++;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return retList;
}
private static void writeCsv(ArrayList<HashMap<String, String>> data, String fileName){
File csv = null;
BufferedWriter bw = null;
try {
csv = new File(fileName);
if (csv.exists()) {
csv.delete();
}
bw = new BufferedWriter(new FileWriter(csv, false));
bw.newLine();
bw.write("Name,CardNo,Descriot,CtfTp,CtfId,Gender,Birthday,Address");
for (Iterator<HashMap<String, String>> iterator = data.iterator(); iterator
.hasNext();) {
HashMap<String, String> currentRow = iterator.next();
bw.newLine();
bw.write(String.format("%s,%s,%s,%s,%s,%s,%s,%s",
currentRow.get("Name"), currentRow.get("CardNo"),
currentRow.get("Descriot"), currentRow.get("CtfTp"),
currentRow.get("CtfId"), currentRow.get("Gender"),
currentRow.get("Birthday"), currentRow.get("Address")));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(bw !=null){
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
lz不会连读文件的代码都要在下码一遍吧
在下能上网的机器里面没有开发环境阿,
上面的代码都是手打的啊,lz体谅一下在下行不?public class ReadText { public static void main(String[] args) throws Exception { dumplicateData("F:/allubuntu/data/xw.txt",
"F:/allubuntu/data/dumplicateName.txt");
} /**
* @param fileName 文件名
* @param dumplicateName 去重复后的文件名
* @throws IOException
*/
public static void dumplicateData(String fileName, String dumplicateName)
throws IOException { FileReader fr = new FileReader(fileName);
FileWriter fw = new FileWriter(dumplicateName);
Map<String, Object> recordMap = new HashMap<String, Object>();
char[] chs = new char[1024];
int len = 0;
String outkey = "";
if (fr != null) {
//读取文件
if (fr.toString().indexOf("Name") >= 0) {
while ((len = fr.read(chs)) != -1) {
String strArray[] = fr.toString().split(",");
outkey = strArray[3];
if (recordMap.get(outkey) == null) {
recordMap.put(outkey, strArray);
} else {
continue;
}
fw.write(chs, 0, len);
fw.flush();
}
}
// 释放资源
fw.close();
fr.close();
} }
}
怎么将读取的文件放在你说的集合。我现在读取文件后写不到目标文件。
哎,我怎么看到ubuntu了, 你不linux嘛, 用shell搞不是更简单? 白让我码这么多代码