2017-11-23 4 views
-2

Ich habe mehrere Fragen im Zusammenhang mit Sortierung in SO, aber ich konnte nicht erreichen, was ich eigentlich will.Gruppierung und Sortierung einer Arraylist in Java

Ich habe eine Klasse wie dieses

class User{ 
    String userName; 
    String phoneNumber; 

    public User(String userName, String phoneNumber) { 
     this.userName = userName; 
     this.phoneNumber = phoneNumber; 
    } 
} 

Dann habe ich einige Daten wie diese hinzugefügt

ArrayList<User> users = new ArrayList<User>(); 
users.add(new User("Aca","223554")); 
users.add(new User("Ada","223544")); 
users.add(new User("Cda","323544")); 
users.add(new User("Bbc","323544")); 
users.add(new User("Bla","323544")); 
users.add(new User("Aka","123554")); 
users.add(new User("Cla","323544")); 

ich Gruppendaten nach Username von User alphabetisch, wie

wollte
A-- Aca, Aka 
B-- BBc , Bla 
C-- Cda, Cla 

Und später möchte ich das in HashMap Like

setzen
Map<String,ArrayList<User>> userMap = new HashMap<String, ArrayList<User>>(); 

userMap.put("A", usersLisA); //usersLisA is an ArrayList of user whose name starts with A 
userMap.put("B", usersLisB); //usersLisB is an ArrayList of user whose name starts with B 

und so weiter.

es so etwas wie Telefonbuch ist, die Art, wie sie sortieren und gruppieren ihre Benutzer alphabetisch

Eine Sache, hier anzumerken, möchte ich in Java7 erreichen.

Jede Hilfe wird sehr geschätzt.

+2

Sie haben eindeutig nicht genug gesucht. Viel Literatur herum. – Mena

+0

Versuchen Sie härter, Sie können nach 'userName' sortieren und dann eine Schleife erstellen, um Ihre Hash-Karte zu füllen –

+0

Implementieren Sie gleich hashCode und compareTo für Benutzer. Verwenden Sie dann eine TreeMap anstelle einer HashMap. –

Antwort

1

Sie haben zwei Möglichkeiten. Mal sehen, die erste:

  • Schritt 1: Schleife über Ihre ArrayList<User> users und setzen user.username in ein String[] usersArr
  • Schritt 2: Sortieren Sie das Array mit Collections.sort(Arrays.asList(usersArr));
  • Schritt 3: Definieren Sie eine int startIndex = 0, ein int endIndex und Schleife über die sortierten Array und:

    if((int) previousString.charAt(0) < (int) currentString.charAt(0)) { 
        endIndex = currentString_position-1; 
        TreeMap.put(previousString.charAt(0), usersArr.subList(startIndex, endIndex)); 
        startIndex = currentString_position; 
    } 
    

Jetzt wollen wir die s sehen econd Option:

  • Schritt 1: Überschreiben von hashCode() und compareTo() für die Klasse Benutzer, so dass Sie später, um es von username
  • Schritt 2: Sortieren Sie die Arraylist mit Collections.sort(Arrays.asList(users));
  • Schritt 3: Gleich wie Schritt 3 in der vorherigen Option

Beachten Sie, dass ich Ihre HashMap zu TreeMap geändert habe. Wenn die Reihenfolge der Schlüssel in Ihrer Map von Bedeutung ist, sollten Sie TreeMap verwenden, da sie bei der Iteration über die Schlüssel in Ordnung sind. Überprüfen Sie diese post.

Hoffe, diese Antwort hat die Dinge für Sie klarer gemacht.

Verwandte Themen