I have java class called Country.
public class Conutry {
private String Code;
private String name;
public Conutry(String code, String name) {
Code = code;
this.name = name;
}
public String getCode() {
return Code;
}
public void setCode(String code) {
Code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
And I need to create a list of countries ordered by name. However, United States and Canada should be the first two items in the list and the rest are sorted alphabetically by country name.knowing that I don't have access to Country class.I know that I have to use Comparator but I don't know the exact logic here.
public class TestDrive {
public static void main(String[] args) {
List<Conutry> list = new ArrayList<Conutry>();
list.add(new Conutry("AR","Argentina"));
list.add(new Conutry("AL","Albania"));
list.add(new Conutry("US","United States of America"));
list.add(new Conutry("JO","Jordan"));
list.add(new Conutry("DZ","Algeria"));
list.add(new Conutry("CA","Canada"));
list.add(new Conutry("FR","France"));
list.add(new Conutry("TR","Turkey"));
list.add(new Conutry("BR","Brazil"));
list.add(new Conutry("AE","United Arab Emirates"));
//This is my code. I think there should be a better solution
Comparator<Conutry> comparator = new Comparator<Conutry>() {
@Override
public int compare(Conutry c1, Conutry c2) {
if("US".equals(c1.getCode()))
return -1;
if("CA".equals(c1.getCode()))
if(c2.getCode()!="US")
return -1;
else
return 1;
if("US".equals(c2.getCode()))
return 1;
if("CA".equals(c2.getCode()))
if("US".equals(c1.getCode()))
return -1;
else
return 1;
return c1.getName().compareTo(c2.getName()) ;
}
};
list.stream().sorted(comparator).forEach(c-> System.out.println(c.getName()));
}
}