Aparna
Aparna

Reputation: 31

Sorting an arraylist respective to another arraylist

I have an ArrayList(list A) containing some ids and another ArrayList(list B) containing names.I have sorted list A by

Collections.sort(list A);

I need to obtain list B according to their corresponding ids.What am I supposed to do in this case?

Upvotes: 0

Views: 1272

Answers (3)

Jayanth
Jayanth

Reputation: 154

No need of a new List to sort. Since they are mapped, they can be used directly.

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));   
}


Collection.sort(idList);
nameList.clear();

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



}

Upvotes: 2

Priyanka Madgundi
Priyanka Madgundi

Reputation: 129

 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)));
   }


 }

}

Upvotes: 0

Mehraj Malik
Mehraj Malik

Reputation: 15874

One possible way of accomplish this is :

Create a class and add the needed properties to it. Then use Comparator to sort according to need.

I have given example of how to sort on id and name basis of class 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-India, 4-Alaska, 5-Barlin, 9-America]

[4-Alaska, 9-America, 5-Barlin, 2-India]

Upvotes: 1

Related Questions