الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه vector_ever في 1 أغسطس 2013 · 4 رد · 993 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم 

 

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

 

ولعمل ذلك اقوم لتخزين العناصر التي في ملف الاكسل داخل 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 في 1 أغسطس 2013 في 19:15

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#2

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

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#3

هذا حل اخر باستخدام الـ 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 في 4 أغسطس 2013 في 01:48

Software Developer
Mahmoudkelany.com


 

#4
Mahmoud Kelany كتب:

هذا حل اخر باستخدام الـ 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 لاستخدامها في ميثود اخرى

لدي مشاركة اوضح عن سؤالي /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 في 4 أغسطس 2013 في 17:04

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#5
vector_ever كتب:

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

لدي مشاركة اوضح عن سؤالي /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 بكل سهوله

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

Software Developer
Mahmoudkelany.com


 

مواضيع مشابهة