假设我有这样的表:
String | Int1 | Int2
"foo" 5 0
"faa" 4 1
"zaa" 0 1
"zoo" 4 2
"laa" 4 3
"loo" 1 4
我想得到的是这样的表:
String | Int1 | Int2
"foo" 5 0
"laa" 4 3
"zoo" 4 2
"faa" 4 1
"loo" 1 4
"zaa" 0 1
首先发生的是基于列Int1
的排序。
发生的第二件事情是基于列Int2
,但仅限于列Int1
中具有相同数字的行
答案 0 :(得分:10)
您通常使用List<Item>
执行此操作,其中Item
是包含所有三个值的类型(例如,第一行为“foo”,5,0)。
然后你会写一个Comparator<Item>
来比较Item
中呈现给它的两个compare
对象的Int1值,如果这给出了明确的答案,则返回该答案。 ..并以其他方式比较Int2值。
答案 1 :(得分:4)
我假设你有一个具有2个整数的字符串的对象?
最简单的方法是使对象实现Comparable
并实现compareTo()
方法。或者您可以将比较器传递给Collections.sort(yourListOfObjects, yourCustomComparator)
compareTo()方法将首先比较第一个int,如果它们相等则比较第二个int。
@Override
public int compareTo(MyObject o) {
// compare int1s .. if equal, compare int2s and return 0,1 or -1
}
这是一个有用的链接
http://download.oracle.com/javase/tutorial/collections/interfaces/order.html
答案 2 :(得分:4)
目前还不清楚你的意思是什么。但在一般情况下,您可以使用Comparator
或使数据结构实现Comparable
对Java中的数据进行排序。在您的情况下,您将创建一个简单的数据结构,在表中封装一行,然后为行数据结构创建Comparator
或让它实现Comparable
。
例如
public class Row implements Comparable<Row> {
public final String theString;
public final int int1;
public final int int2;
public Row(String theString, int int1, int int2) {
this.theString = theString;
this.int1 = int1;
this.int2 = int2;
}
public int compareTo(Row other) {
if(this.int1 == other.int1) {
return new Integer(this.int2).compareTo(other.int2);
}
return new Integer(this.int1).compareTo(other.int1);
}
}
然后,您将创建List<Row>
并使用java.util.Collections.sort(List<?>)
对数据进行排序。
答案 3 :(得分:3)
首先要定义“表格”的含义。
我会在对象Row
中包装每一行并保留这些Row
的数组。然后,您可以实现Comparable<Row>
界面或编写自己的Comparator<Row>
。
所以:
...
class Row implements Comparable<Row> {
String s;
int int1, int2;
...
public int compareTo( Row r ) {
if( int1 != r.int1 ) return int1-r.int1;
else return int2-r.int2;
}
}
并致电Arrays.sort(rows);
或者你可以这样做:
Arrays.sort(rows, new Comparator<Row>() {
public int compare( Row r1, Row r2 ) {
if( r1.int1 != r2.int1 ) return r1.int1-r2.int1;
else return r1.int2-r2.int2;
}
});
其中rows
是Row[]
。
答案 4 :(得分:2)
如果只有Java支持的lambdas ......这在很多语言中都是微不足道的。
但是,嗯,让我们看看。以下是两种通用方法(这些主题有许多不同的变体):
Comparable
(例如“compareTo”)List<NewType>
)Arrays.sort
或Collections.sort
(或类似)或者,
List<List<Object>>
)Arrays.sort
Collections.sort
或Comparator
(或类似)
醇>
快乐的编码。
答案 5 :(得分:1)
这样的东西?
public class Item implements Comparable<Item> {
private String s;
private Integer int1;
private Integer int2;
@Override
public int compareTo(Item o) {
int compare = int1.compareTo(o.int1);
return compare != 0 ? compare : int2.compareTo(o.int2);
}
}
答案 6 :(得分:-1)
我会在Comparator实现中使用CompareToBuilder。
使用示例,
new Comparator<YourObjectType>() {
@Override
public int compare(YourObjectType o1, YourObjectType o2) {
return new CompareToBuilder()
.append(o1.firstFieldToCompare, o2.firstFieldToCompare)
.append(o1.secondFieldToCompare, o2.secondFieldToCompare)
.toComparison();
}
}