I have a list of Java String phone number & I need to sort out them based on their operator like - "013..." and "017..." they are both same operator number.
List<String> phoneNumberList = new ArrayList<String>();
phoneNumberList.add("01313445566");
phoneNumberList.add("01414556677");
phoneNumberList.add("01515667788");
phoneNumberList.add("01616778899");
phoneNumberList.add("01717889900");
phoneNumberList.add("01818990011");
phoneNumberList.add("01919001122");
When I print them, they look like -
01313445566
01414556677
01515667788
01616778899
01717889900
01818990011
01919001122
But I want to print them like this using custom order -
01313445566,
01717889900,
01414556677,
01919001122,
01515667788,
01616778899,
01818990011
How may I create a custom order to sort them as per my requirement?
Define your preferred order in a map
Map<String,Integer> order = new HashMap<>();
order.put("013", 1);
order.put("017", 2);
order.put("014", 3);
order.put("019", 4);
order.put("015", 5);
order.put("016", 6);
order.put("018", 7);
Then sort using map order value
list.sort(Comparator.comparing( e -> order.get(e.substring(0,3))))
Update: For java 6
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String e1, String e2) {
return order.get(e1.substring(0,3)).compareTo(order.get(e2.substring(0,3)));
}
});
Note: It will work if prefix exists in map.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With