Toon posts:

[java] collection compareTo

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een probleem... ik heb onderstaande collection gemaakt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public Collection getAllUsers()
    //  Hier wordt een collectie "users" gevuld met all gebruikers en hun data. 
    // Vervolgens wordt de collectie doorgestuurd naar de method 
    // copyUsersToDetails (zie verder hieronder)
    {
        Collection users = null;
        try
        {
            users = local.findAll();
        }
        catch (Exception ex)
        {
            throw new EJBException(ex);
        }
        return copyUsersToDetails(users);
    } // getAllUsers


Die wordt dur doorgestuurd naar copyUsersToDetails, waar hij ze in een string flikkerd, gescheiden door komma's:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private Collection copyUsersToDetails(Collection users)
    //  Een arraylist wordt aangemaakt en gevuld met een collection met daarin
    // alle gegevens van de gebruikers in het systeem. Alle gebruikers worden 
    // doorlopen en de gegevens worden dmv komma's gescheiden en als String 
    // in de ArrayList gezet. 
    {
        Collection detailsList = new ArrayList();
    
        Iterator i = users.iterator();
        while (i.hasNext()) 
        {
            UserLocal user = (UserLocal) i.next();
            String details = user.toString(",");
            detailsList.add(details);
        }
        return detailsList;
    }// copyUsersToDetails


Vervolgens heb ik dus een ArrayList... probleem waar ik mee zit is eigenlijk, in die arraylist zitten alle gebruikers en al hun data... userId, userName, password, mobileNumber. Hij wordt automatisch gesorteerd op userId, maar ik wil dat hij gaat sorteren op userName.
Nou weet ik dat dit kan met een compareTo maar ik weet niet hoe ik de userName eruit krijg en of ik hem moet comparen als ik alle users ophaal of als ik alle users in een string flikker?!

Ik heb zelf al wat zaken geprobeerd... maar ik krijg alleen de eerste userName eruit en die wil hij echt niet vergelijken met de volgende... wat te doen??

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als je het alleen op userName wilt sorteren kan je in je User-class een compareTo methode ala maken:
Java:
1
2
3
4
compareTo(User x)
{
   return this.userName.compareTo(x.userName); 
}

Die wordt in de sort van de collection dan aangeroepen en dat houdt het vrij simpel.
Maar als je op meerdere manieren wilt kunnen sorteren wordt het lastiger en weet ik iig niet hoe je dat moet doen :)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
ACM schreef op 12 June 2003 @ 13:48:
Maar als je op meerdere manieren wilt kunnen sorteren wordt het lastiger en weet ik iig niet hoe je dat moet doen :)
De sort-methoden kunnen ook een object meekrijgen die de Comparator-interface implementeert (een zogeheten functor). Door verschillende Comparator klassen te maken (of dezelfde klasse verschillend te instantieren) kun je op verschillende manieren sorteren.

Verwijderd

Topicstarter
Ik heb al aardig wat Comparators geprobeerd te maken, maar op de 1 of andere manier wil het niet lukken... Onderstaande code is hoe ik het nu heb...

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 private Collection copyUsersToDetails(Collection users)
{   
    Collection detailsList = new ArrayList();
    ArrayList userNames = new ArrayList();
    
    userNames.add(user.getUserName());
    Collections.sort(UserNames, new Compartor())
    {
        public int compareTo(Object o1, Object o2)
        {
            String user1 = (String)o1;
            String user2 = (String)o2;
                    
            if (user1.length() < user2.length())
            {
                return -1;
            }
            else if(user1.length() > user2.length())
            {
                return 1;
            }
            else
            {
                return user1.compareTo(user2);
            }
        }
    }       
    
    Iterator i = users.iterator();
    while (i.hasNext()) 
    {
        UserLocal user = (UserLocal) i.next();
        String details = user.toString(",");
        detailsList.add(details);
    }
    return detailsList;
}// copyUsersToDetails 


Op regel 8 krijg ik een error op "{". Hij zegt dat dit een syntax error is, maar ik snap echt niet hoe dat mogelijk is. Kan iemand zien waar het aan ligt? Ik zie door de bomen het bos niet meer :?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
op regel 8 staat een ) teveel deze moet je achter de } op regel 27 zetten

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Wat is een Compartor? Als dat een class is die je zelf ergens hebt gedefinieerd dan is dit natuurlijk geen syntactisch correct Java. Je doet een aanroep van een method van Collections en vervolgens implementeer je de Comparator interface zomaar tussen {} zonder dat je ergens zegt dat je dit doet.

Waarom niet gewoon zoiets (niet getest, dus fouten zijn bijna gegarandeerd):

Java:
1
2
3
4
5
public class MyComparator implements Comparator {
  public int compareTo(Object obj1, Object obj2) {
  // doe je vergelijking
  }
}

With the light in our eyes, it's hard to see.

Pagina: 1