2016-03-26 9 views
1

Es gibt eine Webseite, die Liste von Zodiacs sortiert nach Monat wie ("Aries", "March 21 - April 19"),("Taurus", "April 20 - May 20"), ("Gemini", "May 21 - June 20"),("Cancer", "June 21 - July 22") ..... Es gibt eine Option, um einige Sternzeichen zu Favoriten hinzufügen und die Lieblingsschilder werden auf der ersten mit sortierter Reihenfolge und aufgelistet werden Der restliche Tierkreis wird auch in sortierter Reihenfolge nach den Favoriten angezeigt. Für zB hinzugefügt i Zeichen zu Favoriten über die UI folgendenÜberprüfen Sie die Sternzeichen nach Monat sortiert

("Taurus", "April 20 - May 20"),("Libra", "September 23 - October 22"),("Aquarius", "January 20 - February 18") 

Und in UI wird es in folgenden Weise

"Taurus", "April 20 - May 20" 
"Libra", "September 23 - October 22" 
"Aquarius", "January 20 - February 18" 

"Aries", "March 21 - April 19" 
"Gemini", "May 21 - June 20" 
"Cancer", "June 21 - July 22" 
"Leo", "July 23 - August 22" 
"Virgo", "August 23 - September 22" 
"Scorpio", "October 23 - November 21" 
"Capricorn", "November 22 - December 21" 
"Pisces", "February 19 - March 20" 

Mein Hauptziel sind durch month.Also sortiert die ihre Favoriten hinzugefügt, um zu überprüfen ist angezeigt Die übrigen Zodiacs sind ebenfalls nach Monat sortiert aufgelistet. und überprüfte den sortierten Monat von einer xml Datei. Nach dem Hinzufügen einiger Zodiacs zu Favoriten bekomme ich eine xml Antwort, die die Liste der Zodiacs enthält. Und analysiere die Xml für das Erhalten des Sternzeichens mit "21. März - 19. April" und Halte es in einer Karte.

Map<String,String> ZodiacMap = new HashMap<String,String>();  

Lieblings Zodiacs hinzugefügt

zodiacMap1.put("Taurus", "April 20 - May 20"); 
zodiacMap1.put("Libra", "September 23 - October 22"); 
zodiacMap1.put("Aquarius", "January 20 - February 18"); 

remaning Zodiacs

zodiacMap1.put("Aries", "March 21 - April 19"); 
zodiacMap1.put("Gemini", "May 21 - June 20"); 
zodiacMap1.put("Cancer", "June 21 - July 22"); 
zodiacMap1.put("Leo", "July 23 - August 22"); 
zodiacMap1.put("Virgo", "August 23 - September 22"); 
zodiacMap1.put("Scorpio", "October 23 - November 21"); 
zodiacMap1.put("Capricorn", "November 22 - December 21"); 
zodiacMap1.put("Pisces", "February 19 - March 20"); 

Von der Karte muss ich die Lieblingstierkreis überprüfen sind nach Monat sortiert auch die Remining Tierkreis zu überprüfen Monat sortiert .

Wie es zulässig ist ... ????

Antwort

3

Es gibt viele Möglichkeiten, dies zu tun. Hier ist ein Beispiel.

Erstellen Sie eine Klasse Zodiac genannt, mit Feldern:

  • Namen, Beispielwert: "Gemini"
  • Monat (von dem Startdatum), Beispielwert: 5 (für den Monat Mai)
  • Text , Beispielwert: „21. Mai - 20. Juni“

auch implementieren ein Comparator<Zodiac>, die Zodiac Objekte durch ihre .month Felder vergleichen wird.

Zum Beispiel:

Comparator<Zodiac> byMonthComparator = new Comparator<>() { 
    int compare(Zodiac o1, Zodiac o2) { 
     return Integer.compare(o1.month, o2.month); 
    } 
} 

Setzen Sie die Zodiac-Instanzen in einem SortedSet, den benutzerdefinierten Komparator mit dem soeben erstellt wird. Die Artikel in diesem Set werden nach Monat sortiert.

Zum Beispiel:

SortedSet<Zodiac> all = new TreeSet<>(); 
all.add(new Zodiac("Gemini", 5, "May 21 - June 20"); 
all.add(...); 
... 
+0

die Logik u vorausgesetzt, ich glaube, ich kann die sortierte Reihenfolge des zodiacMap1 aus der XML-Antwort erstellt überprüfen ??? gibt es auch einen möglichen Weg mit Enum zu tun? – Psl

+0

Sie könnten zwei dieser sortierten Sätze verwenden, einen "statischen und vollen" für alle 12 und einen, der für die Favoriten leer anfängt. Um alle Favoriten anzuzeigen, durchlaufen Sie alle Einträge im vollständigen Satz und zeigen einen Eintrag an, wenn es nicht auch ein Mitglied von Favoriten ist –