按字母顺序排列数组列表(不区分大小写)
我有一个包含人名的stringarraylist names
。 我想按字母顺序排列数组列表。
ArrayList<String> names = new ArrayList<String>(); names.add("seetha"); names.add("sudhin"); names.add("Swetha"); names.add("Neethu"); names.add("ananya"); names.add("Athira"); names.add("bala"); names.add("Tony"); names.add("Karthika"); names.add("Nithin"); names.add("Vinod"); names.add("jeena"); Collections.sort(names); for(int i=0; i<names.size(); i++) System.out.println(names.get(i));
我试图按照上面的方式对列表进行sorting。 但它正在显示sorting的数组:
Athira Karthika .. .. ananya bala ...
但我不想让它区分大小写。 我想要的结果是:
ananya Athira bala
自定义Comparator
应该帮助
Collections.sort(list, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } });
或者,如果您正在使用Java 8:
list.sort(String::compareToIgnoreCase);
最简单的事情是:
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
试试这个代码
Collections.sort(yourarraylist, new SortBasedOnName()); import java.util.Comparator; import com.RealHelp.objects.FBFriends_Obj; import com.RealHelp.ui.importFBContacts; public class SortBasedOnName implements Comparator { public int compare(Object o1, Object o2) { FBFriends_Obj dd1 = (FBFriends_Obj)o1;// where FBFriends_Obj is your object class FBFriends_Obj dd2 = (FBFriends_Obj)o2; return dd1.uname.compareToIgnoreCase(dd2.uname);//where uname is field name } }
基于上面提到的答案,我设法比较我的自定义类对象是这样的:
ArrayList<Item> itemList = new ArrayList<>(); ... Collections.sort(itemList, new Comparator<Item>() { @Override public int compare(Item item, Item t1) { String s1 = item.getTitle(); String s2 = t1.getTitle(); return s1.compareToIgnoreCase(s2); } });
您需要使用自定义比较器,它将使用compareToIgnoreCase
,而不是compareTo。
从Java 8开始,您可以使用Stream
:
List<String> sorted = Arrays.asList( names.stream().sorted( (s1, s2) -> s1.compareToIgnoreCase(s2) ).toArray(String[]::new) );
它从该ArrayList
获取stream,然后对其进行sorting(忽略大小写)。 之后,stream被转换为一个数组,并转换为一个ArrayList
。
如果使用以下命令打印结果:
System.out.println(sorted);
你会得到以下输出:
[ananya, Athira, bala, jeena, Karthika, Neethu, Nithin, seetha, sudhin, Swetha, Tony, Vinod]