我有一個訂單對象列表。每個訂單對象有5個實例變量。有沒有一種方法可以基於這些instace變量對這個列表進行排序?我需要實現可比的界面。但在那種情況下,我怎麼能排序一個特定的變量?基於實例變量的排序列表java
回答
你可以在這樣的類定義static
Comparator
S,
public static final Comparator<Order> NAME_COMPARATOR = Comparator<Order>(){
public int compare(Order o1, Order o2) {
// provide an impl here using order name
}
}
public static final Comparator<Order> ID_COMPARATOR = Comparator<Order>(){
public int compare(Order o1, Order o2) {
// provide an impl here using order id
}
}
再經過這些排序時這樣,
Collections.sort(list, Order.NAME_COMPARATOR);
Collections.sort(list, Order.ID_COMPARATOR);
你的問題有很多含糊之處。這是一個5場類的例子。本課程使用Comparable
進行排序,在這種情況下,按字段a
排序,然後按字段b
排序,並且如果a
和b
是相同的,那麼這兩個排序順序相同。如果實施Comparable
,則可能還需要執行equals()
,並確保它符合Comparable
接口規範的要求。有關詳細信息,另請參閱javapractices.com "implementing compareTo()
"。
工作例如:
import java.util.Arrays;
class SortableThing implements Comparable<SortableThing>
{
final String foo;
final int a, b, c, d, e;
public SortableThing(String foo, int a, int b, int c, int d, int e)
{
this.foo = foo; this.a = a;
this.b = b; this.c = c;
this.d = d; this.e = e;
}
@Override
public int compareTo(SortableThing o)
{
if (this.a != o.a)
return this.a - o.a;
else if (this.b != o.a)
return this.b - o.b;
else return 0;
}
@Override
public boolean equals(Object o)
{
if (!(o instanceof SortableThing)) return false;
SortableThing st = (SortableThing)o;
return st.a == this.a && st.b == this.b;
}
@Override
public String toString()
{
return new StringBuilder().append(foo).append(": <").append(a)
.append(',').append(b)
.append(',').append(c)
.append(',').append(d)
.append(',').append(e).append('>').toString();
}
public static void main(String[] args)
{
final SortableThing one, two, three, four;
one = new SortableThing("one", 4, 2, 42, 42, 42);
two = new SortableThing("two", 2, 3, 42, 42, 42);
three = new SortableThing("three", 2, 2, 42, 42, 42);
four = new SortableThing("four", 1, 50, 42, 42, 42);
SortableThing[] list = new SortableThing[] {one,two,three,four};
System.out.println("Before: "+Arrays.deepToString(list));
Arrays.sort(list);
System.out.println("After: "+Arrays.deepToString(list));
}
}
輸出:
Before: [one: <4,2,42,42,42>, two: <2,3,42,42,42>, three: <2,2,42,42,42>, four: <1,50,42,42,42>]
After: [four: <1,50,42,42,42>, three: <2,2,42,42,42>, two: <2,3,42,42,42>, one: <4,2,42,42,42>]
如果你的意思是'order by a,b,c',我寫了一個博客來解決它:對java.util.List多字段排序。請參閱第二段代碼,對不起,它是'中文,但代碼和評論是英語:)
假設您有實例變量的「獲取」方法,您可以使用Bean Comparator,因此您不必編寫自定義代碼。
解釋downvote?給出理由讓人們可以自己決定。 – camickr 2010-10-21 05:19:11
但是我需要用英語和德語對這兩種語言進行排序.....這個類可以嗎? – apoorvabade 2010-10-21 08:41:25
在斯卡拉你可以做到這一點非常優雅。
val sortedOrders = orders.sortBy(o => (o.a, o.b, o.c))
通過排序orders
列表中的字段a
,再通過現場b
,然後通過現場c
。
- 1. 基於時間的Rails實例變量?
- 2. 排序排序列表基於值C#
- 3. 實例改變基於OS
- 4. Java中的實例變量
- 5. 的Java在實例變量
- 6. 排序陣列基於數量價值
- 7. 在基於數組的列表上實現選擇排序
- 8. Java的排序基於另一個列表
- 9. 基於Facet變量重新排序X變量
- 10. 基於排序列和另一列值重新排序表
- 11. java listnode實例變量
- 12. Java訪問實例變量
- 13. 排序基於嵌套數組列表
- 14. 甲骨文 - 排序表中基於列
- 15. 基於另一個排序列表?
- 16. Python - 基於多個排序項的元組排序列表
- 17. VB.NET排名基於排序的Excel列
- 18. JPA:基於實例變量動態映射一個實體的表
- 19. 基於值列表的訪問列表框 - 在列上排序
- 20. 基於變量的表格
- 21. R - 基於序列在數據幀列表中創建變量
- 22. 列排序基於價值
- 23. 將變量匹配到基於變量名稱的列表
- 24. 基於鏈表的基數排序
- 25. 基於實例屬性的自定義數組排序
- 26. 基於類的視圖的實例變量是否持久?
- 27. Python根據實例變量從列表中獲取實例
- 28. 基於另一個列表的C#排序列表
- 29. 基於選定列表的排序列表框
- 30. 基於另一個列表的列表排序
它們是什麼樣的變量?原語?如果是這樣,你只需要在compareTo方法中比較它們(你說你會實現Comparable接口)。 – Cristian 2010-10-21 04:23:39
你的意思是多個字段順序?就像SQL'a,b,c'的順序一樣。 – 2010-10-21 04:25:59