2017-06-16 3 views
-1

J'ai une ArrayList (liste A) contenant des ids et une autre ArrayList (liste B) contenant names.I ont trié par la liste ATri d'un arraylist respectif à un autre arraylist

Collections.sort(list A); 

Je dois obtenir la liste B en fonction de leurs ids correspondants. Que dois-je faire dans ce cas?

+2

utilisez TreeMap ou HashMap au lieu de Arraylist il fournit la facilité que vous voulez –

+0

Redesign it. Avoir une classe qui a des noms _and_ ids, et faire une ArrayList de _those_. –

+0

n'a aucun sens - comment la deuxième liste est-elle liée à la première? Vous devriez tenir les deux dans une structure/classe et trier sur id/name comme vous voulez. Implémenter Comparable/Comparateur pour le tri. – Gaurav

Répondre

1

Une façon possible d'y arriver est:

Créer une class et ajouter le nécessaire properties à elle. Ensuite, utilisez Comparator pour trier en fonction des besoins.

J'ai donné exemple de la façon de trier sur id et name base de la classe Student

public class Student { 
    private int id; 
    private String name; 

    public Student(int id, String name) { 
     this.id=id; 
     this.name=name; 
    } 
    @Override 
    public String toString() { 
     return this.id+"-"+this.name; 
    } 

    public String getName(){ 
     return this.name; 
    } 

    public static void main(String[] args) { 
     List<Student> stu = new ArrayList<>(); 
     stu.add(new Student(4,"Alaska")); 
     stu.add(new Student(5,"Barlin")); 
     stu.add(new Student(9,"America")); 
     stu.add(new Student(2,"India")); 
     Comparator<Student> byId = (Student s1,Student s2)->(s1.id)-(s2.id); //java 8 lambda expression 
     stu.sort(byId); 
     System.out.println(stu); 
     //Way-1 -java 8 lambda expression 
     Comparator<Student> byName = (Student s1,Student s2)->s1.getName().compareTo(s2.getName()); 
     //Way-2 - java 8 method reference 
     //Comparator<Student> byName = Comparator.comparing(Student::getName); 
     stu.sort(byName); 
     System.out.println(stu); 

    } 
} 

[2-Inde, 4-Alaska, 5-Barlin, 9-Unis]

[4-Alaska, 9-Amérique, 5 Barlin, 2-Inde]

0
public class A { 

public static void main(String[] args) { 

    List<Integer> idList = new ArrayList<Integer>(); 
    idList.add(5); 
    idList.add(2); 
    idList.add(4); 
    idList.add(1); 
    idList.add(3); 

    List<String> nameList = new ArrayList<String>(); 
    nameList.add("Priya"); 
    nameList.add("Pooja"); 
    nameList.add("Sneha"); 
    nameList.add("Ritesh"); 
    nameList.add("Nikita"); 

    Map<Integer, String> map = new HashMap<Integer, String>(); 
    for(int i = 0; i < idList.size(); i++) { 
     map.put(idList.get(i), nameList.get(i)); 
    } 

    List<Integer> list = new ArrayList<Integer>(map.keySet()); 
    Collection.sort(list); 
    idList.clear(); 
    nameList.clear(); 

    for(int i = 0; i < map.size(); i++) { 
     idList.add(list.get(i)); 
     nameList.add(map.get(list.get(i))); 
    } 


} 

}