2017-01-20 1 views
1

J'ai entrée comme celui-ciAlphanum - Alphanum tri

Online Add-on 3 GB 2015 
Online Add-on 1.5 GB 2015 
Online Add-on 12 GB 2015 
Online Add-on 6 GB 
Online Add-on 375 MB 2015 
Online Add-on 750 MB 2014 

J'ai essayé Alphanum tri qui est donné dans ce link et il me donne une sortie comme indiqué ci-dessous.

Online Add-on 1.5 GB 2015 
Online Add-on 3 GB 2015 
Online Add-on 6 GB 
Online Add-on 12 GB 2015 
Online Add-on 375 MB 2015 
Online Add-on 750 MB 2014 

Mais, pour une meilleure lisibilité humaine je besoin d'une sortie comme comme indiqué ci-dessous où si l'année existe alors sur l'année inférieure MB doit venir d'abord, puis inférieure GB

Online Add-on 750 MB 2014 
Online Add-on 375 MB 2015 
Online Add-on 6 GB 
Online Add-on 1.5 GB 2015 
Online Add-on 3 GB 2015 
Online Add-on 12 GB 2015 

De toute façon pour faire cela en Java ???

+0

http://stackoverflow.com/questions/14337682/sorting-alphanumeric-strings-java prendre référence de cette fois –

+0

@MaheshwarLigade S'il vous plaît passer par la question correctement - Je J'ai essayé toutes ces choses et mon exigence est différente. S'il vous plaît laissez-moi savoir si la question n'est pas claire –

+2

esp. http://stackoverflow.com/a/14337783/2310289 Vous devrez diviser votre ligne et comparer sur le 3ème élément –

Répondre

2

premier format l'info d'une manière canoniques, définir un format pour cela: "en ligne Add-on 750 MB 2014" comme "grandeur de la taille de frefix année"

puis définir une classe pour cette (Capac dans l'exemple ci-dessous)

la grandeur peut être un Enum (unité dans l'exemple) remplacer correctement hashcode et equ.

puis faire une liste avec ces objets Capac et le tri avec un comparateur prédéfini en utilisant des critères doubles, 1er par magnitde, puis par taille ...

Exemple:

public class Capac { 

    public static void main(String[] args) { 
     final String arr[] = { "Online Add-on 750 MB 2014", "Online Add-on 375 MB 2015", "Online Add-on 1.5 GB 2015", 
       "Online Add-on 3 GB 2015", "Online Add-on 6 GB 2015", "Online Add-on 12 GB 2015" }; 

     final List<Capac> myList = new ArrayList<>(); 
     for (final String string : arr) { 
      myList.add(new Capac(string)); 
     } 
     System.out.println(myList); 
     // sort 
     Collections.sort(myList, new Comparator<Capac>() { 

      @Override 
      public int compare(Capac o1, Capac o2) { 
       if (o1.unit == o2.unit) { 
        return Double.compare(o1.size, o2.size); 
       } else { 

        return Integer.compare(o1.unit.ordinal(), o2.unit.ordinal()); 
       } 

      } 
     }); 
     System.out.println(myList); 
    } 

    private final double size; 
    private final int year; 
    private final Unit unit; 
    private final String prefix; 

    public Capac(String ss) { 
     final String[] rr = ss.split(" "); 
     prefix = rr[0] + " " + rr[1]; 
     size = Double.parseDouble(rr[2]); 
     unit = Unit.valueOf(rr[3]); 
     year = Integer.parseInt(rr[4]); 
    } 

    @Override 
    public String toString() { 
     return prefix + " " + size + " " + unit + " " + year; 
    } 

    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + ((prefix == null) ? 0 : prefix.hashCode()); 
     long temp; 
     temp = Double.doubleToLongBits(size); 
     result = prime * result + (int) (temp^(temp >>> 32)); 
     result = prime * result + ((unit == null) ? 0 : unit.hashCode()); 
     result = prime * result + year; 
     return result; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     final Capac other = (Capac) obj; 
     if (prefix == null) { 
      if (other.prefix != null) 
       return false; 
     } else if (!prefix.equals(other.prefix)) 
      return false; 
     if (Double.doubleToLongBits(size) != Double.doubleToLongBits(other.size)) 
      return false; 
     if (unit != other.unit) 
      return false; 
     if (year != other.year) 
      return false; 
     return true; 
    } 

} 

enum Unit { 
    KB, MB, GB, TB 
} 

le outoput regardera comme

[Add-on en ligne 750,0 MB 2014, Add-on en ligne 375,0 MB 2015, en ligne Add-on 1.5 GB 2015, Add-on en ligne 3.0 GB 2015, Add-on en ligne 6.0 GB 2015, Add-on en ligne 12.0 GB 2015]

et

[Add-on en ligne 375,0 MB 2015, en ligne Ajouter sur 750,0 MB 2014, en ligne Add-on 1.5 Go 2015, Add-on en ligne 3.0 GB 2015, Add-on en ligne 6.0 GB 2015, Add-on en ligne 12.0 GB 2015]