• 0
vector_ever

مشكلة بالتحويل من List الى Set

سؤال

السلام عليكم 

 

في البداية لدي كود كل ما يجب أن يقوم به هو أن يقرأ البيانات من ملف اكسل ويخزنها في قاعدة بيانات

 

ولعمل ذلك اقوم لتخزين العناصر التي في ملف الاكسل داخل ArrayList ثم اقوم بتصديرها الى قاعدة البيانات

 

الآن ما اريد عمله هو أن لدي ملف اكسل لكنه يحوي بيانات متكررة وانا لا اريد أن أخزن اي بيانات متكررة في قواعد البيانات أي انني اريد ان اهمل اي قيم متكررة 

 

كما نرى في ملف الاكسل هذه القيم المتكررة Songs.xls ولتفادي ذلك خطر لي ان استخدم Set في تخزين القيم وبذلك تقوم الـ Set باهمال اي قيمة مكررة

 

هدفي كان هو أن يتم تخزين كل القيم في ArrayList  ثم تحويل الـ ArrayList الى Set  كي يتم اسقاط القيمم المكررة

		ArrayList list = new ArrayList();		Set set = new TreeSet(list);

المشكلة أنه عندما اطبق هذه العملية على الكود الذي كتبته احلصل على خطأ

Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Comparable	at java.util.TreeMap.compare(Unknown Source)	at java.util.TreeMap.put(Unknown Source)	at java.util.TreeSet.add(Unknown Source)	at java.util.AbstractCollection.addAll(Unknown Source)	at java.util.TreeSet.addAll(Unknown Source)	at java.util.TreeSet.<init>(Unknown Source)	 at Mysql.Excel2DB4.readExcelFile(Excel2DB4.java:73) --> يشير الى عملية التحويل اشرت لها فوق

الكود 

import java.io.File;import java.io.FileInputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.Iterator;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;public class Excel2DB {		public static void main(String[] args) throws Exception{				ArrayList dataHolder = readExcelFile(); }		public static ArrayList readExcelFile(){					ArrayList dataSheet = new ArrayList();			try {	     	    FileInputStream file = new FileInputStream(new File("d:\\Songs.xls"));	     	    //Get the workbook instance for XLS file 	    HSSFWorkbook workbook = new HSSFWorkbook(file);	 	    //Get first sheet from the workbook	    HSSFSheet sheet = workbook.getSheetAt(0);	     	    //Iterate through each rows from first sheet	    Iterator<Row> rowIterator = sheet.iterator();	    while(rowIterator.hasNext()) {	        Row row = rowIterator.next();	        	        //display from the first row 	        if(row.getRowNum() > 0)	        {	       	        //For each row, iterate through each columns	        Iterator<Cell> cellIterator = row.cellIterator();	        	        ArrayList data = new ArrayList();	        	        while(cellIterator.hasNext()) {	            	            //Getting the cell contents	            Cell cell = cellIterator.next();	            	        data.add(cell);	          }	        dataSheet.add(data);		      	        }	        }		    }catch (Exception e){e.printStackTrace(); 		    }		    return dataSheet;		    }}}

طبعا هذا فقط جزء من الكود الخاص فقط بقراءة البينات من ملف الاكسل وتخزينها في arraylist  ثم تخزين هذه الArraylist  في Set  كي يتم اسقاط القيم المتكررة

 

الخطا واضح وهو يظهر انه يجب ان يكون هناك مقارنات Compare

 

اثناء بحثي في الانترنت فهمت انه يجب انشاء كلاس خاص لتمثيل البيانات ومن اجل أن يقوم بعمل compare

 

صراحة لم أفهم كيف ولماذا فهل من مساعدة يا أخوة

تم تعديل بواسطه vector_ever
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

4 إجابة على هذا السؤال .

  • 0

أي أفكار يا شباب لانه شغلي موقف على هذه النقطة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا حل اخر باستخدام الـ HashMap وليس الـ Set يفى بالغرض

يعتبر ان المفتاح الاساسى هو CD_ID

import java.io.File;import java.io.FileInputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;public class Excel2DB {    public static void main(String[] args) throws Exception {        HashMap<String, ArrayList> dataMap = readExcelFile();        for (Map.Entry<String, ArrayList> entry : dataMap.entrySet()) {            String key = entry.getKey();            ArrayList list = entry.getValue();            System.out.println(key + " -> " + list.toString());        }    }    public static HashMap<String, ArrayList> readExcelFile() {        HashMap<String, ArrayList> dataMap = new HashMap<String, ArrayList>();        try {            FileInputStream file = new FileInputStream(new File("D:/Songs.xls"));            //Get the workbook instance for XLS file            HSSFWorkbook workbook = new HSSFWorkbook(file);            //Get first sheet from the workbook            HSSFSheet sheet = workbook.getSheetAt(0);            //Iterate through each rows from first sheet            Iterator<Row> rowIterator = sheet.iterator();            while (rowIterator.hasNext()) {                Row row = rowIterator.next();                //display from the first row                if (row.getRowNum() > 0) {                    Cell firstCell = null;                    //For each row, iterate through each columns                    Iterator<Cell> cellIterator = row.cellIterator();                    ArrayList data = new ArrayList();                    while (cellIterator.hasNext()) {                        //Getting the cell contents                        Cell cell = cellIterator.next();                        if (firstCell == null) {                            firstCell = cell;                        }                        data.add(cell);                    }                    dataMap.put(firstCell.toString(), data);                }            }        } catch (Exception e) {            e.printStackTrace();        }        return dataMap;    }}
تم تعديل بواسطه Mahmoud Kelany
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا حل اخر باستخدام الـ HashMap وليس الـ Set يفى بالغرض

يعتبر ان المفتاح الاساسى هو CD_ID

import java.io.File;import java.io.FileInputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;public class Excel2DB {    public static void main(String[] args) throws Exception {	    HashMap<String, ArrayList> dataMap = readExcelFile();	    for (Map.Entry<String, ArrayList> entry : dataMap.entrySet()) {		    String key = entry.getKey();		    ArrayList list = entry.getValue();		    System.out.println(key + " -> " + list.toString());	    }    }    public static HashMap<String, ArrayList> readExcelFile() {	    HashMap<String, ArrayList> dataMap = new HashMap<String, ArrayList>();	    try {		    FileInputStream file = new FileInputStream(new File("D:/Songs.xls"));		    //Get the workbook instance for XLS file		    HSSFWorkbook workbook = new HSSFWorkbook(file);		    //Get first sheet from the workbook		    HSSFSheet sheet = workbook.getSheetAt(0);		    //Iterate through each rows from first sheet		    Iterator<Row> rowIterator = sheet.iterator();		    while (rowIterator.hasNext()) {			    Row row = rowIterator.next();			    //display from the first row			    if (row.getRowNum() > 0) {				    Cell firstCell = null;				    //For each row, iterate through each columns				    Iterator<Cell> cellIterator = row.cellIterator();				    ArrayList data = new ArrayList();				    while (cellIterator.hasNext()) {					    //Getting the cell contents					    Cell cell = cellIterator.next();					    if (firstCell == null) {						    firstCell = cell;					    }					    data.add(cell);				    }				    dataMap.put(firstCell.toString(), data);			    }		    }	    } catch (Exception e) {		    e.printStackTrace();	    }	    return dataMap;    }}

شكرا اخي محمود على تفاعلك صراحة انا الغاية الاساسية هو انني كنت اسعى لتخزين البيانات بعد قرائتها من ملف اكسل في Set وذلك كي استطيع حذف العناصر ابمتكررة ( الصفوف المكررة) وومن بعد ذلك اعادة هذه القيم الى Arraylist لاستخدامها في ميثود اخرى

لدي مشاركة اوضح عن سؤالي http://arabteam2000-forum.com/index.php/topic/279787-hashlist-%D8%AA%D8%AE%D8%B2%D9%86-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%85%D8%AA%D9%85%D8%A7%D8%A6%D9%84%D8%A9-%D9%88%D9%85%D9%83%D8%B1%D8%B1%D8%A9/ تستطيع بعد اذنك ان تراجعها وترى ما اقصد ولك جزيل الشكر

تم تعديل بواسطه vector_ever
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا اخي محمود على تفاعلك صراحة انا الغاية الاساسية هو انني كنت اسعى لتخزين البيانات بعد قرائتها من ملف اكسل في Set وذلك كي استطيع حذف العناصر ابمتكررة ( الصفوف المكررة) وومن بعد ذلك اعادة هذه القيم الى Arraylist لاستخدامها في ميثود اخرى

لدي مشاركة اوضح عن سؤالي http://arabteam2000-forum.com/index.php/topic/279787-hashlist-%D8%AA%D8%AE%D8%B2%D9%86-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%85%D8%AA%D9%85%D8%A7%D8%A6%D9%84%D8%A9-%D9%88%D9%85%D9%83%D8%B1%D8%B1%D8%A9/ تستطيع بعد اذنك ان تراجعها وترى ما اقصد ولك جزيل الشكر

 

ما المشكله اذن بامكانك ان تقوم بعمل ذلك من الHashMap وتحصل علي ArrayList بكل سهوله

ما ادري ايش المشكله اذن؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .