java - 如何仅按第一个元素对二维 ArrayList<String> 进行排序

标签 java sorting arraylist

<分区>

为避免重复声明,我查看了 this发布,这不是我想要的。
所有其他 2D ArrayList 问题都涉及 doubleint 数字;我的问题是关于 Strings

我在做什么

我有一个 2D ArrayList,定义如下:

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

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

示例

假设我已经填充了我的 ArrayList 并且我有这个:

{"Mike", "(805) 766-4920"}
{"Emily", "(705) 668-9292", "(705) 555-1060"}
{"James", "(605) 965-2000"}

我希望我的输出是这样的:

{"Emily", "(705) 668-9292", "(705) 555-1060"}    
{"James", "(605) 965-2000"}
{"Mike", "(805) 766-4920"}

我想保持数字与名称相对应,但只需按名称对数组进行排序。

我希望得到什么样的答案

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

最佳答案

您可以使用 Collections.sort并提供自定义 Comparator比较每个列表的第一个元素,即名称:

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);

输出:

[[Emily, (705) 668-9292, (705) 555-1060], [James, (605) 965-2000], [Mike, (805) 766-4920]]

关于java - 如何仅按第一个元素对二维 ArrayList<String> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20480723/

相关文章:

java - 有没有办法混合 AndroidX 和使用支持库的子项目?

java - 在 Java 中创建一个 Cabinet 文件

java - java中不同对象的长hashCode返回相同的数字

linux - 根据第一列/行中的字符长度对文件进行排序

java - ArrayList 声明和处理

java - 以迭代方式从 arraylist 中删除项目

java - 如何将下拉值存储到表中以便它显示所选值?

java - 使用Hibernate技术在JAVA中按字母顺序对Jtree进行排序

algorithm - 最适合对几乎已排序的数组进行排序的排序算法

java - 计算数组列表中关键字的出现次数