如何按 Java 中的元素大小对 ArrayList 进行排序?
How to sort an ArrayList by its elements size in Java?
所以我有一个 List<String> L1 = new ArrayList<>()
,其中包含以下字符串作为元素:
- l, l, u, u.
- r, u, d, l, d, l, u.
- l, u, d, r, r, r, r, r, u, d.
- l, u.
- l, u, r.
如何根据元素的大小对 list
进行排序,以便在最终状态下 L1 应如下所示:
- l, u.
- l, u, r.
- l, l, u, u.
- r, u, d, l, d, l, u.
- l, u, d, r, r, r, r, r, u, d.
我试过使用 Collections.sort
,但按字母顺序排序,这显然不是我想要的。
我想你要找的是Collections.sort(java.util.List, java.util.Comparator)。有了它,您可以指定一个自定义 Comparator
,根据长度而不是字母关系比较字符串。
像这样:
List<String> stringList = new ArrayList<String>();
// Fill the list
Comparator<String> stringLengthComparator = new Comparator<String>()
{
@Override
public int compare(String o1, String o2)
{
return Integer.compare(o1.length(), o2.length());
}
};
Collections.sort(stringList, stringLengthComparator);
假设 Java 8 可用,并且列表的类型为 List<String>
:
list.sort(Comparator.comparing(String::length));
这将创建一个新的Comparator
,它使用字符串的长度作为排序的基础,然后根据它进行排序。该列表是从短到长排序的,但如果这是不受欢迎的...
list.sort(Comparator.comparing(String::length).reversed());
...将反转它以首先对最长的字符串进行排序。
如果列表实际上是一个列表的列表(这个问题有点不清楚),将使用 List::size
而不是 String::length
。
您可以使用任何排序技术(冒泡、插入等)对 Arraylist.Here 的元素进行排序 Arraylist.Here 我使用冒泡排序对 Arraylist 的元素进行排序。
public class SortArray
{
public static void main(String[] args)
{
List<String> al = new ArrayList<String>();
//add items to arraylist objects.
al.add("l,l,u,u");
al.add("r, u, d, l, d, l, u");
al.add("l, u, d, r, r, r, r, r, u, d");
al.add("l,u");
al.add("l,u,r");
//Use bubble sort here.
for(int i=0;i<al.size();i++){
for(int j=0;j<al.size()-i-1;j++){
if( (al.get(j)).length() > (al.get(j+1)).length() ){
Collections.swap(al, j, j+1);
}
}
}
for(String str : al){
System.out.println(str);
}
}
}
所以我有一个 List<String> L1 = new ArrayList<>()
,其中包含以下字符串作为元素:
- l, l, u, u.
- r, u, d, l, d, l, u.
- l, u, d, r, r, r, r, r, u, d.
- l, u.
- l, u, r.
如何根据元素的大小对 list
进行排序,以便在最终状态下 L1 应如下所示:
- l, u.
- l, u, r.
- l, l, u, u.
- r, u, d, l, d, l, u.
- l, u, d, r, r, r, r, r, u, d.
我试过使用 Collections.sort
,但按字母顺序排序,这显然不是我想要的。
我想你要找的是Collections.sort(java.util.List, java.util.Comparator)。有了它,您可以指定一个自定义 Comparator
,根据长度而不是字母关系比较字符串。
像这样:
List<String> stringList = new ArrayList<String>();
// Fill the list
Comparator<String> stringLengthComparator = new Comparator<String>()
{
@Override
public int compare(String o1, String o2)
{
return Integer.compare(o1.length(), o2.length());
}
};
Collections.sort(stringList, stringLengthComparator);
假设 Java 8 可用,并且列表的类型为 List<String>
:
list.sort(Comparator.comparing(String::length));
这将创建一个新的Comparator
,它使用字符串的长度作为排序的基础,然后根据它进行排序。该列表是从短到长排序的,但如果这是不受欢迎的...
list.sort(Comparator.comparing(String::length).reversed());
...将反转它以首先对最长的字符串进行排序。
如果列表实际上是一个列表的列表(这个问题有点不清楚),将使用 List::size
而不是 String::length
。
您可以使用任何排序技术(冒泡、插入等)对 Arraylist.Here 的元素进行排序 Arraylist.Here 我使用冒泡排序对 Arraylist 的元素进行排序。
public class SortArray
{
public static void main(String[] args)
{
List<String> al = new ArrayList<String>();
//add items to arraylist objects.
al.add("l,l,u,u");
al.add("r, u, d, l, d, l, u");
al.add("l, u, d, r, r, r, r, r, u, d");
al.add("l,u");
al.add("l,u,r");
//Use bubble sort here.
for(int i=0;i<al.size();i++){
for(int j=0;j<al.size()-i-1;j++){
if( (al.get(j)).length() > (al.get(j+1)).length() ){
Collections.swap(al, j, j+1);
}
}
}
for(String str : al){
System.out.println(str);
}
}
}