如何对ArrayList <ArrayList <String >>进行排序?

Eth*_*Fox 5 java sorting arraylist

所以我正在研究我正在为学校工作的程序的广度优先搜索功能,当我通过给定节点的传出边缘时,凭借我如何经历可能的边缘,它看起来像这样:

[[A, 1], [D, 1], [C, 2], [D, 2]]
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是:

[[A, 1], [C, 2], [D, 1], [D, 2]]
Run Code Online (Sandbox Code Playgroud)

其中一对的第一个索引是边指向的节点的名称,第二个索引是边的标签.基本上我想按字母顺序浏览这些边,首先按节点名称,然后按标签名称,但我不知道如何做到这一点,因为Collections.sort()不适用于2D ArrayList.关于这个好方法的任何指针/想法?感谢大家!

编辑:我使用JRE 1.7进行此分配,而不是1.8

jeo*_*vre 2

这是完整的工作代码。 在 java SDK8 中使用 lambda 表达式。

正如您将看到的,我添加了一个简单的类和一个比较器。这既简单又强大。

package com.rizze.test.labs.sof;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.junit.Test;

public class SOF {    

    public static class Link {
        public String name;
        public int id;

        public static Link build(String n, int i){
            Link l = new Link();
            l.name = n;
            l.id=i;
            return l;
        }

        public String toString(){
            return String.format("[%s , %d]", name,id);
        }           
    }       

    @Test
    public void test() {

        List<Link> links = new ArrayList<Link>();

        //SSETUP [[A, 1], [C, 2], [D, 1], [D, 2]]
        links.add(Link.build("D", 1));
        links.add(Link.build("A", 1));
        links.add(Link.build("D", 2));
        links.add(Link.build("C", 2));


        Collections.sort(links, new Comparator<Link>() {    
            @Override
            public int compare(Link p1, Link p2) {
                int ret = p1.name.compareTo(p2.name);
                if(ret == 0) {
                    ret= p1.id - p2.id;
                }
                return ret;             
            }               
        });
        System.out.println(links);          
    }    
}
Run Code Online (Sandbox Code Playgroud)

//控制台输出

Before : [[D , 1], [A , 1], [D , 2], [C , 2]]
Sorted: [[A , 1], [C , 2], [D , 1], [D , 2]]
Run Code Online (Sandbox Code Playgroud)

//GIST链接 https://gist.github.com/jeorfevre/cbcd7dac5d7fabde6a16db83bdfb7ef5