Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对2D ArrayList排序<;字符串>;仅通过第一个元素_Java_Sorting_Arraylist - Fatal编程技术网

Java 如何对2D ArrayList排序<;字符串>;仅通过第一个元素

Java 如何对2D ArrayList排序<;字符串>;仅通过第一个元素,java,sorting,arraylist,Java,Sorting,Arraylist,为了避免重复声明,我看了这篇文章,它并不是我想要的每一个涉及double或int数字的2D数组列表问题;我的问题是关于字符串的 我在做什么 我有一个2D ArrayList,定义如下: arraylistnamesandnumbers=newarraylist(); 其思想是,每行ArrayList中的第一项包含姓名,每行中的其余列包含电话号码(未知数量)。因此,我希望避免将其转换为常规数组 样品 假设我已经填充了我的ArrayList,我有: {“Mike”,“(805)766-4920}

为了避免重复声明,我看了这篇文章,它并不是我想要的
每一个涉及
double
int
数字的2D数组列表问题;我的问题是关于字符串的

我在做什么 我有一个2D ArrayList,定义如下:

arraylistnamesandnumbers=newarraylist();
其思想是,每行ArrayList中的第一项包含姓名,每行中的其余列包含电话号码(未知数量)。因此,我希望避免将其转换为常规数组

样品 假设我已经填充了我的ArrayList,我有:

{“Mike”,“(805)766-4920}
{“Emily”,“(705)668-9292”,“(705)555-1060”}
{“詹姆斯”,“(605)965-2000}
我希望我的输出是这样的:

{“Emily”,“(705)668-9292”,“(705)555-1060”}
{“詹姆斯”,“(605)965-2000}
{“迈克”,“805”766-4920}
我希望保持数字与名称对应,但只需按名称对数组进行排序

我希望得到什么样的答案
我希望有一个内置的函数操作类型的东西,但如果有人为我创建了一个排序数组方法,使用2D ArrayList作为输入,我会很好。我还没有看到任何明确回答这个问题的问题。我也会继续尝试自己想出一个答案。

为了多样性,为什么不使用HashMap,除非你想要重复的密钥。 键将是name,值将是数字的ArrayList

String name="John";

ArrayList<String> phonenumbers=new ArrayList<String>();

phonenumbers.add("80925887");
phonenumbers.add("+166476654");

TreeMap<String, ArrayList> tm=new TreeMap<String, ArrayList>();

tm.put(name, phonenumbers);
String name=“John”;
ArrayList PhoneNumber=新的ArrayList();
电话号码。添加(“80925887”);
电话号码。添加(“+166476654”);
TreeMap tm=新的TreeMap();
tm.put(姓名、电话号码);
您可以使用并提供一个自定义列表,用于比较每个列表的第一个元素,即名称:

List<ArrayList<String>> namesAndNumbers = new ArrayList<ArrayList<String>>();
namesAndNumbers.add(new ArrayList<String>(Arrays.asList("Mike", "(805) 766-4920")));
namesAndNumbers.add(new ArrayList<String>(Arrays.asList("Emily", "(705) 668-9292", "(705) 555-1060")));
namesAndNumbers.add(new ArrayList<String>(Arrays.asList("James", "(605) 965-2000")));
Collections.sort(namesAndNumbers, new Comparator<ArrayList<String>>() {    
        @Override
        public int compare(ArrayList<String> o1, ArrayList<String> o2) {
            return o1.get(0).compareTo(o2.get(0));
        }               
});
System.out.println(namesAndNumbers);

创建自定义比较器:

final Comparator<List<String>> comparator = new Comparator<List<String>>() {
    public int compare(List<String> pList1, List<String> pList2) {
        return pList1.get(0).compareTo(pList2.get(0));
    }
};
final List<List<String>> lists = Arrays.asList(
    Arrays.asList("Mike", "(805) 766-4920"),
    Arrays.asList("Emily", "(705) 668-9292", "(705) 555-1060"),
    Arrays.asList("James", "(605) 965-2000")
);
Collections.sort(lists, comparator);
for (List<String> list : lists) System.out.println(list);
最终比较器比较器=新比较器(){
公共整数比较(列表pList1、列表pList2){
返回pList1.get(0).compareTo(pList2.get(0));
}
};
最终列表列表=Arrays.asList(
数组。asList(“Mike”,“(805)766-4920”),
数组.asList(“Emily”、“(705)668-9292”、“(705)555-1060”),
数组.asList(“James”,“(605)965-2000”)
);
集合。排序(列表、比较器);
for(List:List)System.out.println(List);

为什么不在Java中使用Collections呢?我认为这对于您的案例来说是一个完美的工具,不是吗?@harikris它是一个嵌套的ArrayList。是的,我认为集合可以工作,但我不知道如何处理它。如果你使用集合,那么分类将变得轻而易举。此外,如果使用集合,则可以避免重复条目,而不是列表—所有这些都是自动完成的。了解集合和泛型并不难。我可以推荐一本参考书吗?不确定这是否会被视为促销。这本书不是我写的。只是觉得这是一个很好的资源。作者是凯西·塞拉和伯特·贝茨。他们的第一本Java书中有一章是关于集合/泛型的。哈。@harikris你可以建议,但我可能不会通过阅读来回答这个问题。我现在没有时间马上读。不过,可能晚些时候。谢谢,没问题。那一章有一个有效的例子。只是想让你知道。这可能是一个很好的建议(我以前从未使用过HashMaps),但这并不是我问题的答案。如果可以的话,用一种对HashMap排序的方法来补充这个答案。当然,伙计,如果你的目的是自然顺序,你可以使用TreeMap而不是HashMap,它们都实现了Map接口。我还没见过其他答案这么简单。我很高兴我问了这个问题。@mikeyaworski You's welcome=)这个解决方案也有效。这也值得+1。
final Comparator<List<String>> comparator = new Comparator<List<String>>() {
    public int compare(List<String> pList1, List<String> pList2) {
        return pList1.get(0).compareTo(pList2.get(0));
    }
};
final List<List<String>> lists = Arrays.asList(
    Arrays.asList("Mike", "(805) 766-4920"),
    Arrays.asList("Emily", "(705) 668-9292", "(705) 555-1060"),
    Arrays.asList("James", "(605) 965-2000")
);
Collections.sort(lists, comparator);
for (List<String> list : lists) System.out.println(list);