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
这是完整的工作代码。 在 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
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |