-2

I'm having trouble figuring out how to sort a Linkedlist with a fileinfo, code below shows process of "building content",

 private void ReloadScanFiles() {
        if (gsfCurRow != null) {
            ArrayList<FileInfo> newTreeFileInfoList = new ArrayList<FileInfo>();
            ArrayList<FileInfo> addTreeFileInfoList = new ArrayList<FileInfo>();
            ArrayList<String> delTreeFileNameList = new ArrayList<String>();
            /////// linked list
            LinkedList<FileInfo> newTreeFileInfoLinkedList = new LinkedList<FileInfo>();
            LinkedList<FileInfo> addTreeFileInfoLinkedList = new LinkedList<FileInfo>();
            LinkedList<String> delTreeFileNameLinkedList = new LinkedList<String>();



            File folder = new File(gsfCurRow.DOC_SOURCE_PATH);

            FileFilter fileFilter = new FileFilter() {
                public boolean accept(File file) {
                    return !file.isDirectory() && !file.isHidden();
                }
            };
/*          
            FilenameFilter fileFilter = new FilenameFilter() {
                public boolean accept(File dir, String name) {
                    return name.toLowerCase().endsWith(".pdf") ||
                           name.toLowerCase().endsWith(".jpeg") ||
                           name.toLowerCase().endsWith(".jpg") ||
                           name.toLowerCase().endsWith(".tiff") ||
                           name.toLowerCase().endsWith(".txt");                    
                }
            };
*/
            File[] listOfFiles = folder.listFiles(fileFilter);          

            for (int i = 0; i < listOfFiles.length; i++){
                FileInfo fileInfo = new FileInfo();

                fileInfo.Name = listOfFiles[i].getName();
                //fileInfo.Length = (long) listOfFiles[i].length();
                fileInfo.LastModified = (long) listOfFiles[i].lastModified(); //Long.parseLong("473", 10);

                //newTreeFileInfoLinkedList.add(fileInfo);
                newTreeFileInfoLinkedList.add(fileInfo);
            }


            //add new items
            for (FileInfo fileInfo: newTreeFileInfoLinkedList){ 
            //for (FileInfo fileInfo: newTreeFileInfoLinkedList){       

                boolean existsItem = false;

                if (actTreeFileInfoLinkdList != null){
                    for (FileInfo fileInfo1: actTreeFileInfoLinkdList){
                        if (fileInfo.Name.equals(fileInfo1.Name)) {

                            existsItem = true;
                            break;
                        }
                    }
                }


                if (!existsItem) {
                    //addTreeFileInfoLinkedList.add(fileInfo);
                    addTreeFileInfoLinkedList.add(fileInfo);
                }

            }



            //delete non existing items

            if (actTreeFileInfoLinkdList != null){
                for (FileInfo fileInfo: actTreeFileInfoLinkdList){
                    boolean existsItem = false;

                    for (FileInfo fileInfo1: newTreeFileInfoLinkedList){
                        if (fileInfo.Name.equals(fileInfo1.Name)) {
                            existsItem = true;
                            break;
                        }
                    }


                    if (!existsItem) {
                        //delTreeFileNameLinkedList.add(fileInfo);
                        delTreeFileNameLinkedList.add(fileInfo.Name);
                    }
                }                   
            }

            actTreeFileInfoLinkdList = newTreeFileInfoLinkedList;



            //add items to tree
            for (FileInfo fileInfo: addTreeFileInfoLinkedList){
                TreeItem item = new TreeItem(tv, SWT.NONE); 
                //item.setText(new String[] {fileInfo.Name, Long.toString(fileInfo.Length), df.format(fileInfo.LastModified)});
                item.setText(new String[] {fileInfo.Name, null, df.format(fileInfo.LastModified)});             
                fileCount ++;                       
            }


            //delete item from tree
            //update locked by
            TreeItem [] items = tv.getItems();   
            for (TreeItem item: items){
                //delete
                if (delTreeFileNameLinkedList.contains(item.getText())) {
                    if (item.getChecked()) {
                        checkedFileCount --;                    
                    }
                    fileCount --;
                    item.dispose();
                }
                //update
                if (!item.isDisposed()){
                    Integer lock_idusr = null;
                    try {
                        lock_idusr = db.FileLockedBy(gsfCurRow.DOC_SOURCE_ID, item.getText());
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }


                    if ((lock_idusr != null) && (!lock_idusr.equals(idusr))){
                        try {
                            item.setText(3, db.GetOpid(lock_idusr));
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                        Color color = new Color(display,180, 0, 0);
                        item.setForeground(color);
                        item.setChecked(false);
                    } 
                    else{
                        item.setText(3, "");
                        Color color = new Color(display,0, 0, 0);
                        item.setForeground(color);                      
                    }
                }
            }

            //sort linked list files
            //actTreeFileInfoLinkdList




            BtnDocAssignEnabled();
            GenerateTreeStatusText();


        }
    }

You can see output on the picture below: enter image description here

I need to sort these items based on their name or date, i'm thinking putting listeners on both columns meno - means name, datum - means date. How do i achieve this? How can i sort linkedList?

h0neybaLL
  • 91
  • 1
  • 2
  • 9
  • you could create multiple [Comperator](https://stackoverflow.com/questions/5245093/using-comparator-to-make-custom-sort) and depending on what you do want to sort for you could use the `Comperator` fitting your needs – SomeJavaGuy Nov 28 '17 at 11:10
  • listener is the way to go – XtremeBaumer Nov 28 '17 at 11:12

1 Answers1

0

For name:

Collections.sort(newTreeFileInfoLinkedList, (f1, f2) -> {
    return f1.Name.compareTo(f2.Name);
});

For comparing Dates, just replace .Name with .LastModified

CodedStingray
  • 390
  • 1
  • 10