![](/img/trans.png)
[英]Sorting ArrayList of ArrayList of double and string by the double in Java
[英]Sorting ArrayList of Arraylist<String> in java
我有一个StringList的ArrayList。
在每个索引的外部ArrayList中,每个Inner ArrayList有四个项目有四个参数。
现在我想根据Contact Name Parameter对完整的ArrayList进行排序。
意味着我想访问外部Arraylist并且外部Arraylist的每个索引上存在的内部ArrayList应该根据联系人名称进行排序。
比较器/可比接口不太可能帮助我。
Collection.sort无法帮助我
排序豆的Arraylist Arraylist 。 我已阅读这篇文章,但它是ArrayList
的ArrayList<Object>
如何弄清楚这个问题?
假设列表中的列表在订单ID,名称,地址和编号中具有字符串(即名称在索引1处),您可以使用Comparator
,如下所示:
List<List<String>> list;
Collections.sort(list, new Comparator<List<String>> () {
@Override
public int compare(List<String> a, List<String> b) {
return a.get(1).compareTo(b.get(1));
}
});
顺便说一句,重要的不是你使用的是ArrayList
:使用抽象类型声明变量是很好的编程习惯,即List
(就像我在这段代码中所做的那样)。
我觉得发布这个很糟糕,因为List<Contact>
会是更好的选择。 但是这样的事情是可能的:
ArrayList<ArrayList<String>> yourList = ...
Collections.sort(yourList, new Comparator<ArrayList<String>>() {
@Override
public int compare(ArrayList<String> one, ArrayList<String> two) {
return one.get(1).compareTo(two.get(1));
}
});
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ListsUtils {
public static void sortListOfLists(List < List < String >> listOfLists) {
// first sort the inner arrays using collections.sort
for (List < String > innerList: listOfLists) {
Collections.sort(innerList);
}
// now sort by comparing the first string of each inner list using a comparator
Collections.sort(listOfLists, new ListOfStringsComparator());
}
static final class ListOfStringsComparator implements Comparator < List < String >> {
@
Override
public int compare(List < String > o1, List < String > o2) {
// do other error checks here as well... such as null. outofbounds, etc
return o1.get(0).compareTo(o2.get(0));
}
}
}
我想我只是假设您必须对字符串数组列表进行排序...这就是为什么我首先对内部数组列表进行排序,然后通过比较每个数组的第1项来对外部列表进行排序。 没有读你在答案中的联系方式。
在这种情况下,删除用于对内部列表进行排序的for循环,您仍然可以使用比较器进行排序,但是与正确的索引而不是第一个元素进行比较。
Collections.sort(listOfLists,new ListOfStringListComparator());
比较器/可比较接口无法帮助,因为我没有任何对象。
不正确。 你有对象。 您尝试排序的所有内容都是对象。
如果您尝试在ArrayList<ArrayList<String>>
对ArrayList<String>
对象进行排序,则需要实现Comparator<ArrayList<String>>
。 (可比方法对于这个数据结构来说是错误的。你需要声明一个ArrayList的自定义子类......那就太糟了!)
但更好的想法是用自定义类表示对象。 在这种情况下, ArrayList of String
的ArrayList of String
应该是一个自定义Contact
类,包含4个字段,getter和(如果需要)setter。 然后声明为实现Comparable<Contact>
,并实现compareTo
方法。
其他答案显示如何基于列表中的一个字段实现Comparator。 这可能就足够了,但它会给你一个排序顺序,其中一对不同的“约翰史密斯”的顺序是不确定的。 (我会使用第二个字段作为打破平局。如果id是唯一的,Id字段将是理想的。)
你应该为你的数据结构创建一个类(如果你不能,那么请指明原因。我看不出任何好的理由):
public class Contact implements Comparable {
private String id;
private String name;
private String address;
private String number;
// Getters and setters, and compareTo.
}
然后在列表中使用它:
List<Contact> contacts = new ArrayList<Contacts>();
对它进行排序将是微不足道的。
使用以下比较器:
class MyComparator implements Comparator<ArrayList<String>> {
private static int indexToCompare = 1;
@Override
public int compare(ArrayList<String> o1, ArrayList<String> o2) {
return o1.get(indexToCompare).compareTo(o2.get(indexToCompare));
}
}
这里indexToCompare
是arraylist的索引,它对应于Contact Name。 在你的情况下“1”
我认为这是一个不将集合视为一流对象的情况。 有一个名为“Contact”的新类,而不是将其抽象为ArrayList,并使用Comparator。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.