यह करना चाहिए:
// Define our input list
def list = [ 'Armadillo', 'Cat', 'Dog', 'Cow', 'Zebra', 'Horse', 'Cow' ]
// Define a closure that will do the sorting
def sorter = { String a, String b, List prefixes=[ 'Cat', 'Cow' ] ->
// Get the index into order for a and b
// if not found, set to being Integer.MAX_VALUE
def (aidx,bidx) = [a,b].collect { prefixes.indexOf it }.collect {
it == -1 ? Integer.MAX_VALUE : it
}
// Compare the two indexes.
// If they are the same, compare alphabetically
aidx <=> bidx ?: a <=> b
}
// Create a new list by sorting using our closure
def sorted = list.sort false, sorter
// Print it out
println sorted
कि प्रिंट:
[Cat, Cow, Cow, Armadillo, Dog, Horse, Zebra]
मैं टिप्पणी की है यह कोशिश करते हैं और हर कदम लेता है समझाने के लिए। sorter
बंद पर एक वैकल्पिक पैरामीटर के रूप में डिफ़ॉल्ट उपसर्ग आइटम को जोड़ कर, इसका मतलब है कि हम इस तरह सामान कर सकते हैं डिफ़ॉल्ट बदलने के लिए:
// Use Dog, Zebra, Cow as our prefix items
def dzc = list.sort false, sorter.rcurry([ 'Dog', 'Zebra', 'Cow' ])
println dzc
कौन सा फिर सूची प्रिंट के रूप में हल कर:
[Dog, Zebra, Cow, Cow, Armadillo, Cat, Horse]
यदि गाय सूची में है और बिल्ली नहीं है, तो क्या गाय को अभी भी दूसरी जगह में होना चाहिए? क्या होगा अगर सूची सिर्फ '[गाय'] है? – ataylor
नहीं तो गाय पहले होना चाहिए। – bladet